JQuery AJAX调用返回JSONP,但无法访问JSON数据

问题描述:

我想处理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

我想我本来应该更具体。我认为他遇到的问题是从响应中获取数据,以便在他的页面上使用它。

我测试过这个,它工作。

我正在使用“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。它通过加载响应为“

+0

@Quentin我编辑了我的回复扩展。我认为他的警报给了他一些像[Object]的东西,他不知道该怎么做。 – quid 2014-12-05 01:36:52

+0

为什么你认为这个数据结构,而不是 $ MYDATA的=阵列( 阵列( \t “ID”=> “1”, “标题”=> “博士”, “名字”=>“约翰“, ”lastName“=>”King“), array( \t”id“=> 2, ”Title“=>”Dr.” “名字”=> “约翰”, “姓氏”=> “王”) ); 成功:功能(数据,textStatus,jqXHR){ 变种i = 0; 做{ $( 'body')。append(i +“>”+ data [i ++]。lastName); } while(i iostream 2014-12-07 21:06:08

我想你一定编码所有与json_encode函数的数据。是这样的:

json_encode($myData) 

或者

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

不,如果你不包含'callback',那么它不是JSONP。如果你编码整个东西,你最终会得到一个字符串,它也不是JSONP。 – Quentin 2014-12-04 23:27:16