2

我用 PHP 做了一个简单的 API。这个 API 回显是一个使用 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 更改为正确的)。

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

我现在的 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 接受来自像我这样的外部脚本的传入请求。

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

4

2 回答 2

4

AFAIK,您遇到了 AJAX 请求的跨域问题。对于这个问题,最简单、最跨浏览器的修复方法是使用 JSONP。您的 PHP 脚本中没有任何确定的方法可以解决此问题,因为它部分取决于客户端。也不是很多人知道如何禁用跨域禁令,出于测试目的,您可以考虑禁用浏览器安全性。

只需使用 JSONP,老实说,它会为您省去很多麻烦。如果您已经在使用 jQuery,那么您不妨使用它的最佳特性(跨域的东西)。
如果您曾经计划放弃 jQuery,请阅读 CORS 请求的内容

于 2013-05-13T09:15:18.857 回答
3

您需要在标头中设置一个允许 CrossOriginRessourceSharing (CORS)的参数,否则您的浏览器将由于 Same-Origin Policy (SOP)阻止这些调用。如果您在 php 中设置了allow-origin-response-header ,那么一切都应该按预期工作。

推杆

header('Access-Control-Allow-Origin: *');  

在您的顶部test.php将解决您的问题。(或者最好替换*为您的呼叫来自的特定域)。

于 2013-05-13T09:14:15.213 回答