JSONP请求PHP页面无法正常工作(跨域)

时间:2011-05-05 11:30:23

标签: php javascript jquery cross-domain jsonp

这是我的PHP页面(在不同的URL上)......

<?php
header('Content-Type: application/json');
?>
stat({"online":1});

这是我的jQuery:

$(document).ready(function(){

    var url = 'http://blah.com/jsontest.php?callback=stat';

    $.getJSON(url, function(data) {
        if (data.online !== undefined) {
            console.log('yay');
        }
    }).error(function() {
        console.log('no');
    });

});

由于某种原因,它始终记录'no',即它正在运行错误函数。

使用jQuery 1.5.2任何想法?

2 个答案:

答案 0 :(得分:4)

首先,JSON-P不是JSON。内容类型应为application/javascript。某些浏览器可能会因为不安全而拒绝JSON-P作为JSON。

其次,getJSON期望您请求的URL具有?作为回调方法名称(并且您需要让PHP关注$_GET['callback'])。

第三,如果修复不起作用,请查看Firebug / Chrome调试器/ Dragonfly /等中的Net选项卡,查看实际通过网络传输的数据。

答案 1 :(得分:0)

有一些恶作剧包括“回调”功能。显然你没有返回一个对象,而是一个在原始客户端请求中提交的函数。我只是模糊地理解这一切意味着什么,但是,我确实有一些代码可以实现这一点:

服务器端:

<?php
$headers = get_headers($toGetUrl,1);
$return["pop_singer"] = "Britney Spears";
// Right here is where the json object gets wrapped in a function that was submitted under the name "callback"
echo $_GET['callback']."(".json_encode($return).")";
?>

客户端(这与$ .getJSON()相同):

$.ajax({
type: "GET",
url: serverUrl,
dataType: 'jsonp',
error: function(request, status) {
    // Do some error stuff
},
success: function(data, textStatus, jqXHR) {
    var property = data.pop_singer;   // equals "Britney Spears"
    // Do some successful stuff
}

});