2014-12-04 108 views
-1

我想處理JSONP請求中返回的數據,但我很難進行調用。爲什麼下面的代碼失敗?JQuery AJAX調用返回JSONP,但無法訪問JSON數據

HTML文件:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Simple JSONP Test</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
     <script src="lib/jquery.js"></script> 
    </head> 
    <body> 
     <div>Simple JSONP Test</div> 
     <script> 
      // alert('start'); 

      $.ajax({ 
      contentType: "application/json; charset=utf-8", 
      url: "http://www.myserver.com/simplejsontest.php", 
      dataType: "jsonp", 
      success: function (data, textStatus, jqXHR) { 
       alert('Success! data: ' + data); 
      }, 
      error: function (xr, msg, e) { alert('Msg: ' + msg + ', error: ' + e + 'xr: ' + xr.toString()); } 
     }); 

     </script> 
    </body> 
</html> 

和PHP文件simplejsontest.php:

<?php 

$myData = array(
//array(
    "id" => "1", 
"Title" => "Dr.", 
"firstName" => "John", 
"lastName" => "King"); 
/*, 
array(
    "id" => 2, 
"Title" => "Dr.", 
"firstName" => "John", 
"lastName" => "King") 
); 
*/ 

//echo $_GET['callback']."(".'{"users":'.json_encode($myData).'})'; 
echo $_GET['callback']."(". json_encode($myData). ')'; 
?> 
+0

請解釋什麼是「無法訪問JSON數據」的意思;你有錯誤信息嗎? – 2014-12-04 22:28:00

+0

'$ _GET ['callback']'的值是多少?另外,Ajax調用的結果是什麼?成功還是錯誤? – Dim13i 2014-12-04 23:01:02

+0

'contentType:「application/json; charset = utf-8」,' - 你正在做一個GET請求,沒有請求主體來描述內容類型。 – Quentin 2014-12-04 23:27:37

回答

-1

我想我本來應該更具體。我認爲他遇到的問題是從響應中獲取數據,以便在他的頁面上使用它。

我測試過這個,它工作。

我正在使用「lastName」,因爲這是上面PHP中$ myData數組中的一個元素。既然你已經使用在你的JavaScript變量「數據」添加你在你的PHP數組定義的元素「姓氏」:

alert("last name: " + data.lastName); 

如果你想在你的對象爲每個元素返回不止一個結果您將使用多維數組並在響應返回到javascript時創建某種計數器。

PHP:

$myData = array(
    "id" => array(
     0 => 1, 
     1 => 2 
    ), 
    "title" => array(
     0 => "Mr.", 
     1 => "Dr." 
    ), 
    "firstName" => array(
     0 => "John", 
     1 => "Sara" 
    ), 
    "lastName" => array(
     0 => "King", 
     1 => "Jones" 
    ) 
); 

echo $_GET['callback']."(". json_encode($myData). ')'; 

這是通過返回的結果的jQuery/javascript來循環。在這個例子中,我只是追加姓氏到HTML的身體:

success: function (data, textStatus, jqXHR) { 
    var i = 0; 
    do{ 
     $('body').append(data.lastName[i++]); 

    } 
    while(i < data.id.length); 
}, 
+0

這是JSONP。它通過加載響應爲「

-1

我想你一定編碼所有與json_encode函數的數據。是這樣的:

json_encode($myData) 

或者

json_encode($_GET['callback']."(". $myData. ')'); 
+0

不,如果你不包含'callback',那麼它不是JSONP。如果你編碼整個東西,你最終會得到一個字符串,它也不是JSONP。 – Quentin 2014-12-04 23:27:16

相關問題