我正在使用以下代码进行跨域JSONP调用:
jQuery.ajax({
async: true,
url: 'http://mnews.hostoi.com/test.json',
dataType: 'jsonp',
method: "GET",
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus + ': ' + errorThrown);
},
success: function (data, textStatus, jqXHR) {
if (data.Error || data.Response) {
exists = 0;
}
}
});
在Firebug中调试时,出现以下错误:
SyntaxError: missing ; before statement
然而,当我通过像jsonlint.com这样的工具传递我的json对象(可通过JQ代码中的链接获得)时,它说它是有效的JSON。我也没有发现任何异常现象。怎么会返回语法错误?是一些我没有得到的JSONP细节还是什么?
{"news":[ {
"sentences": [
"Neuroscientists have discovered abnormal neural activity...",
"The researchers found that these mice showed many symptoms...",
"\"Therefore,\" the study authors say, \"our findings provide a novel.."
],
"summaryId": "ZJEmY5",
"title": "Abnormal neural activity linked to schizophrenia"
}]}
提前致谢。
答案 0 :(得分:29)
JSONP不是JSON。 JSONP响应将包含一个JavaScript脚本,该脚本仅包含一个带有一个参数的函数调用(到预定义函数)(这是一个符合JSON语法的JavaScript对象文字)。
您获得的响应是JSON,而不是JSONP,因此您作为JSONP处理它的努力失败。
将dataType: 'jsonp'
更改为dataType: 'json'
(或完全删除该行,服务器会发出正确的内容类型,因此您无需覆盖它。)
由于您的脚本在与JSON不同的原点上运行,因此您还需要take steps(大多数但不是全部,其中需要您控制提供JSON的主机)来解决{ {3}}
答案 1 :(得分:7)
错误是因为它返回的是JSON而不是JSONP。
JSONP应该看起来像
someCallBackString({ The Object });
答案 2 :(得分:4)
这是工作示例
callback
您应该将file.json
放在callback({"item":{".......
的开头,如:
vtkSelectEnclosedPoints
答案 3 :(得分:2)
作为epascarello pointed out,JSONP响应必须像:
一样发送callBackFunction({ JSON Object })
然后可以将呼叫者功能设置为:
var url = "http://someremoteurl.com/json";
$.getJSON(url + "?callback=?", null, function(data) {
callBackFunction(data);
});
然后您可以将响应数据循环为:
function callBackFunction(data)
{
console.log(data);
}
答案 4 :(得分:1)
如果您使用“ callback =?”参数,则服务器端的响应应如下所示:
EXEC proc_av1(&input);
如果未定义“ callback =?”参数,则您的响应应如下所示:
$_callback = $_GET['callback'];
echo $_callback . '(' . json_encode(YOUR_VARIABLE) . ');';
答案 5 :(得分:0)
如果问题与Ruby有关,那么在控制器中确保正确呈现格式。例如:
def view_product
data = Product.find params[:id]
render :json => data, :callback => params[:callback]
end
在你的渲染方法中,你应该有:callback 参数,否则它将以json而不是jsonp呈现。