API停止支持JSONP - php

我用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更改为正确的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接受来自我的外部脚本的传入请求。

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

参考方案

您需要在标头中设置一个参数,以允许CrossOriginRessourceSharing (CORS),否则由于“同源策略” (SOP),浏览器将阻止这些调用。如果您在PHP中设置allow-origin-response-header,则所有内容均应按预期工作。

推杆

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

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

PHP:从函数返回值并直接回显它? - php

这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…

PHP:将数据从二维数组复制到一维数组的最快方法 - php

我有一个巨大的二维PHP数组,带有500万行。$t = [ [ "id" => 1, "name" => "foo" ], [ "id" => 2, "name" => "bar" ] ]; 现在,我必须将此数组的I…

php-printf和sprintf具有不同的输出 - php

我编写了以下微型php程序来测试printf和sprintf:<?php $str_1 = printf("%x%x%x", 65, 127, 245); $str_2 = sprintf("%x%x%x", 65, 127, 245); echo $str_1 . "\n"; echo $s…

json_encode网址失败 - php

有人在this bug附近吗?echo json_encode(array('url'=>'/foo/bar')); {"url":"\/foo\/bar"} 我使用Zend_Json and Zend_Json_Expr以便我甚至可以在js对象中获取回调函数-但我无法获得…

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…