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

标签 php javascript jquery ajax jsonp

我尝试生成动态 JSONP echo,但在 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"}])

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

谢谢

最佳答案

试试这个。

//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()”。通过手动设置回调,它应该可以工作。

关于php - 在 PHP 中使用多维数组生成有效的 JSONP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15989817/

相关文章:

php - PHP foreach循环中的多个索引变量

javascript - JSON Stringify 无法解码值

javascript - 将 Force Network 数据保存到 JSON 文件

php - json 字符串化为 php

javascript - 在 HTML + Javascript web 中启动 couchdb 数据库

javascript - jquery post 与 Angular 使用 POST 方法

php - 这是 php 中的快速进程 strpos()/stripos() 或 preg_match()

php - PHP 中的子域漂亮 URL

javascript - 选择框自动选择

php - 在mysql中的单个字段中插入多个数据