我在PHP中创建了一个返回
的JSON API?({"a":"b"})
当我输入
时"http://mylink.php?callback=?"
在浏览器中。但是,当我从桌面应用程序(使用$ .ajax)提供相同的链接时,不会返回结果。创建JSON API的PHP代码是
<?php
header('Content-Type: application/javascript'); // Also tried application/json
$results = array();
$results['a'] = 'b';
$encoded = json_encode($results);
$encoded_callback = '?' . '(' . $encoded . ')';
echo $encoded_callback;
return $encoded_callback;
?>
javascript代码仅包含
$.ajax({
url:url,
dataType:"jsonp",
success:function(data){
... some printing ...
}
});
直到知道和当我用另一个JSON API(不是由我创建)尝试它时它工作正常。所以我认为问题在于我的API。
有什么问题?我觉得缺少某些东西,以便可以进行沟通,但我不知道在哪一方(服务器或客户端)。
答案 0 :(得分:2)
$encoded_callback = '?' . '(' . $encoded . ')';
?
在JavaScript中不是有效的函数名称(它是an operator)。你应该把callback参数中指定的函数名放在那里(不是?
,?
告诉jQuery生成一个唯一的名字)。
$encoded_callback = $_GET['callback'] . '(' . $encoded . ')';
更好的是:停止使用JSONP。绕过相同的原始策略是一种破坏,这种策略在很多方面限制了您(包括仅允许GET请求并使您的API公开,而不是将其限制为特定的来源)。
CORS为跨源请求提供了一种非hacky,完全标准的方法,您应该使用它。