API停止支持JSONP

时间:2013-05-13 09:06:59

标签: php javascript jquery json jsonp

我在PHP中创建了一个简单的API。 此API echo是使用json_encode的对象。

每个例子:

echo json_encode($obj);

我正在使用jQuery从此API检索信息。 在测试脚本和API时,它们都在同一台服务器上运行。 一切都很好。

jQuery的一个例子:

$.ajax({

    url: "php/api/test.php"
    dataType: "json",
    type: "POST",
    succes: function(data) {
        console.log("success");
    },
    error: function(response) {
        console.log("error");
    }
});

现在这很好用。 但是,由于API在外部服务器上运行,因此不再起作用(是的,我将URL更改为正确的URL)。

我必须改变API和javascript才能使用JSONP 在jQuery最终从API接收信息之前。

我的jQuery现在是:

$.ajax({

    url: "http://externalserver/php/api/test.php"
    dataType: "jsonp",
    type: "POST",
    succes: function(data) {
        console.log("success");
    },
    error: function(response) {
        console.log("error");
    }
});

PHP将返回此信息以便工作:

echo $_REQUEST['callback'] . '(' . json_encode($obj) . ')';

现在我实际上宁愿使用JSON代替JSONP。

我知道我需要更改PHP文件,让API接受来自我这样的外部脚本的请求。

你能告诉我我需要做什么吗?

2 个答案:

答案 0 :(得分:4)

AFAIK,您遇到了AJAX请求的跨域问题。针对此问题,最简单,最跨浏览的修复方法是使用JSONP。您的PHP脚本中没有任何确定可以解决此问题的确定因素,因为它部分归结为客户端。 Not a lot of people know how to disable the cross-domain ban either,出于测试目的,您可以考虑禁用浏览器安全性。

只要使用JSONP,说实话,它会为您节省很多麻烦。如果您已经在使用jQuery,那么您也可以使用它的最佳功能(跨域事物)。
如果您计划放弃jQuery,read up on what CORS requests entail

答案 1 :(得分:3)

您需要在标题中设置一个允许CrossOriginRessourceSharing (CORS)的参数,否则您的浏览器将因同源策略(SOP)阻止这些调用。如果你在php中设置allow-origin-response-header,一切都应该按预期工作。

header('Access-Control-Allow-Origin: *');  
位于test.php顶部的

将解决您的问题。 (或者最好将*替换为您来电的特定域名。)