2012-01-30 77 views
0
<html> 
<head> 

<title>Testing AJAX</title> 

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 

<script> 
    function init() { 
     $("#form1").submit(submitForm); 
    } 

    function submitForm() { 
     var paramValue = $("#param_input").val(); 

     $.ajax({ 
       type: "GET", 
       url: 'http//xxx.edu/xxx/autocomplete.php', 
       data: { 
        query: paramValue 
       }, 
       dataType: "json", 
       complete: function(data){ 
        alert(JSON.stringify(data)); 
       } 
     }); 
    } 

    // On page load 
    $(document).ready(init); 

</script> 
</head> 

<body> 

<form id="form1" name="form1_name" action="" > 
<label for="find">Value</label> 
<input type="text" name="param" id="param_input" /> 
<input type="submit" name="button" id="button" value="Find"> 
</form> 

</body> 

</html> 

我真的希望能夠查詢我的PHP腳本(返回經json_encode()一個JSON),並使用該JSON信息。jQuery的AJAX查詢PHP腳本

眼下的警告框這樣說:

{"readyState":0,"responseText":"","status":0,"statusText":"error"} 

所以我做錯了什麼。有任何想法嗎?我都是新來的AJAX/jQuery。

編輯:添加數據類型: 「JSON」,但並沒有幫助 - 仍然返回錯誤的JSON的東西...

+0

是調用一個相同來源的腳本,即是腳本正在運行在同一臺服務器作爲一個在創建它調用$頁面阿賈克斯? – CBusBus 2012-01-30 18:43:55

+0

你確認了(在螢火蟲,提琴手,...)如果PHP腳本返回有效/任何數據? – roberkules 2012-01-31 03:03:12

回答

1

使用成功,你會得到你的數據。在完成後,您將獲得XHR對象

請參閱下面的腳本

function submitForm() { 
    var paramValue = $("#param_input").val(); 

    $.ajax({ 
      type: "GET", 
      url: 'http//xxx.edu/xxx/autocomplete.php', 
      data: { 
       query: paramValue 
      }, 
      dataType: "json", 
      success: function(data){ 
       alert(JSON.stringify(data)); 
      } 
    }); 
} 
+0

我什麼也沒有(警報沒有出現)而不是錯誤的警報。 。 – lollercoaster 2012-01-30 20:18:11

0

嘗試傳遞dataType參數去jQuery的ajax

例如:

$.ajax({ 
      type: "GET", 
      url: 'http//xxx.edu/xxx/autocomplete.php', 
      data: { 
       query: paramValue 
      }, 
      dataType: 'json', 
      complete: function(data){ 
       console.log(data); 
      } 
    }); 

一個jQuery的AJAX接口的好處是,你不會有JSON.parse(或更糟的是,eval)如果你使用正確的dataType標誌。

+0

嗯。這實際上並沒有改變任何東西,當我添加它.. – lollercoaster 2012-01-30 18:29:50

+0

你想跨域做到這一點?域,協議(http/s)和端口在大多數情況下都需要匹配以符合同源策略。響應的狀態代碼是什麼? – buley 2012-01-30 18:31:00

+0

不,我的域名。當使用語法url:'../ xxx/autocomplete.php'時,也會發生相同的行爲。狀態(如上所示)爲0.不知道如何查看HTTP狀態。使用'console.log(data)'顯示' 資源解釋爲其他,但以MIME類型undefined傳輸。「所以我不知道發生了什麼... – lollercoaster 2012-01-30 20:21:36

0

你幾乎只是在你的$ .ajax調用中添加dataType

function submitForm() { 
    var paramValue = $("#param_input").val(); 

    $.ajax({ 
      type: "GET", 
      url: 'http//xxx.edu/xxx/autocomplete.php', 
      data: { 
       query: paramValue 
      }, 
      dataType: "json", 
      complete: function(data){ 
       alert(JSON.stringify(data)); 
      } 
    }); 
} 

或者,您可以通過在http響應頭中聲明返回內容爲json來聲明它。

header('Cache-Control: no-cache, must-revalidate'); 
header('Content-type: application/json'); 

如果您僅限於香草JS,那麼您可以使用上述方法,但仍可能使用它。

+0

嗯。這實際上並沒有改變任何東西,當我添加它.. – lollercoaster 2012-01-30 18:29:36

+0

這是您的代碼中唯一普遍的錯誤。如果使用console.log(),字符串,對象等,完成時的輸出是什麼? – CBusBus 2012-01-30 18:33:23

+0

使用'console.log(data)'顯示'資源解釋爲Other,但是使用MIME類型undefined.'傳遞,所以我不知道發生了什麼...... – lollercoaster 2012-01-30 20:24:38

0

如果您打算也發送JSON數據,那麼您必須將已發送到服務器的數據串起來。

$.ajax({ 
    type: "GET", 
    url: 'http//xxx.edu/xxx/autocomplete.php', 
    data: JSON.stringify({ 
     query: paramValue 
    }), 
    dataType: "json", 
    complete: function(data){ 
     alert(JSON.stringify(data)); 
    } 
}); 

你應該添加這個JavaScript文件,以確保JSON解析器存在: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

+0

不行,不發送JSON。只是獲取參數 – lollercoaster 2012-01-30 20:25:09