在PHP中使用多维数组生成有效的JSONP

在PHP中使用多维数组生成有效的JSONP,php,javascript,jquery,ajax,jsonp,Php,Javascript,Jquery,Ajax,Jsonp,我试图生成动态JSONP回显,但在js ajax调用后,我的inspector工具中出现错误: 未捕获引用错误:jQuery191019304498913697898\u 1365868235193未定义索引。php:1 PHP: Ajax调用响应: jQuery191019304498913697898_1365868235193([{"name":"A","host":"A.com"},{"name":"B","host":"B.com"}]) 你知道吗? 我的错在哪里 谢谢你改变这个

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

未捕获引用错误:jQuery191019304498913697898\u 1365868235193未定义索引。php:1

PHP:

Ajax调用响应:

jQuery191019304498913697898_1365868235193([{"name":"A","host":"A.com"},{"name":"B","host":"B.com"}])
你知道吗? 我的错在哪里

谢谢你改变这个

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

改变这个

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

试试这个

//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>

函数myCallback(数据、状态){
控制台日志(数据);
}   
$.ajax({
url:'test.php',
数据类型:“jsonp”,
jsonp:“回调”,
jsonpCallback:“myCallback”,
跨域:是的,
ifModified:true
});
记住,如果没有指定,jQuery会自动为回调生成别名。您的回调实际上被设置为
“jQuery191019304498913697898_1365868235193()”
。通过手动设置回调,它应该可以工作

试试这个

//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>

函数myCallback(数据、状态){
控制台日志(数据);
}   
$.ajax({
url:'test.php',
数据类型:“jsonp”,
jsonp:“回调”,
jsonpCallback:“myCallback”,
跨域:是的,
ifModified:true
});

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

不确定这是否会造成很大问题,但您缺少分号:echo
$\u GET['callback']。(“$jsonp.”)另外,您正在打印以响应(然后是JS)回调GET param。这就是javascript抱怨“未捕获引用错误”的原因。除非javascript中的变量有效,否则不要打印该值。@navnav:我添加了缺少的分号,但同样的错误:/@ricardohdz:对不起,我的英语不是很好,但是你能解释一下吗?你的数组中缺少了一个右括号\u不确定这是否会有很大问题,但是你缺少了分号:echo
$\u GET['callback'].('.$jsonp.');;
此外,您正在打印回调GET参数以响应(然后打印到JS)。这就是javascript抱怨“未捕获引用错误”的原因。除非javascript中的变量有效,否则不要打印该值。@navnav:我添加了缺少的分号,但同样的错误:/@ricardohdz:对不起,我的英语不是很好,但你能解释一下吗?数组上缺少一个右括号。\u pushJS-error:Uncaught ReferenceError:myCallback没有定义。复制并粘贴所有代码exa确切地说?myCallback()需要在发出ajax请求的位置定义。JS-Error:Uncaught ReferenceError:myCallback没有定义您是否复制并粘贴了所有代码?myCallback()需要在发出ajax请求的位置定义。