0

我尝试生成动态 JSONP 回显,但在 js ajax 调用后我的检查器工具中出现错误:

Uncaught ReferenceError: jQuery191019304498913697898_1365868235193 is not defined index.php:1

PHP:

<?php

header('Content-type: application/javascript; charset=utf-8');

$array = array();
array_push($array, array('name' => 'A', 'host' => 'A.com'));
array_push($array, array('name' => 'B', 'host' => 'B.com'));

//$jsonp = json_encode($array, JSON_FORCE_OBJECT);
$jsonp = json_encode($array);


if(isset($_GET['callback']))
{
    echo $_GET['callback'].'('.$jsonp.')';
}
else
{
    echo $json;
}

?>

JS:

$.ajax({
    username: username,
    password: password,
    url: url,
    dataType: 'jsonp',
    crossDomain: true,
    ifModified: true,
    success: function (data, status, jqXHR) {
        console.log(data);
        $.each(data, function(index, value) {
            console.log(value['name']);
        });
    }
});

Ajax 调用响应:

jQuery191019304498913697898_1365868235193([{"name":"A","host":"A.com"},{"name":"B","host":"B.com"}])

你有什么想法吗?我的错误在哪里?

谢谢

4

2 回答 2

4

尝试这个。

//test.php文件

<?php
header('Content-type: application/json; charset=utf-8');

$array = array();
array_push($array, array('name' => 'A', 'host' => 'A.com'));
array_push($array, array('name' => 'B', 'host' => 'B.com'));

$jsonp = json_encode($array);

if(isset($_GET['callback'])){
    echo $_GET['callback'] . '(' . $jsonp . ')';
}else{
    echo $jsonp;
}
?>

//js文件

<script type="text/javascript">

    function myCallback(data, status){
        console.log(data);
    }   

    $.ajax({
        url: 'test.php',
        dataType: 'jsonp',
        jsonp: 'callback',
        jsonpCallback: 'myCallback',
        crossDomain: true,
        ifModified: true
    });
</script>

请记住,如果您未指定回调,jQuery 会自动为回调生成别名。您的回调实际上被设置为"jQuery191019304498913697898_1365868235193()". 通过手动设置回调它应该可以工作。

于 2013-04-13T18:04:40.693 回答
0

改变这个

 header('Content-type: application/javascript; charset=utf-8');

 header('Content-type: application/json; charset=utf-8');
于 2013-04-13T16:12:23.070 回答