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

时间:2014-12-04 22:25:40

标签: php jquery ajax jsonp

我想处理JSONP请求中返回的数据,但是我很难拨打电话。为什么以下代码失败?

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). ')';
?>

2 个答案:

答案 0 :(得分:-1)

我想我应该更具体一点。我认为他遇到的问题是将响应中的数据提供给他可以在页面上使用的内容。

我已经对此进行了测试,但确实有效。

我正在使用“lastName”,因为这是上面PHP中$ myData数组中的一个元素。由于您在javascript中使用了变量“data”,因此添加了在php数组中定义的元素“lastName”:

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);
},

答案 1 :(得分:-1)

我认为你必须使用json_encode函数对所有数据进行编码。像这样的东西:

json_encode($myData)

或者

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