AJAX调用和干净的JSON,但语法错误:缺less; 在陈述之前

我正在使用此代码进行跨域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中debugging时,出现以下错误:

在这里输入图像描述

 SyntaxError: missing ; before statement 

但是,当我通过像jsonlint.com这样的工具传递我的json对象(通过JQ代码中的链接可用)时,它表示它是有效的JSON。 而且我也没有发现任何exception。 它怎么会返回一个语法错误? 这是一些JSONP细节我没有得到或什么?

JSON示例

 {"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" }]} 

提前致谢。

JSONP不是JSON。 一个JSONP响应将包含一个JavaScript脚本,它只包含一个函数调用(对于一个预定义的函数)和一个参数(这是一个符合JSON语法的JavaScript对象文字)。

你得到的回应是JSON,而不是JSONP,所以你的努力来处理它作为JSONP失败。

dataType: 'jsonp'更改为dataType: 'json' (或者完全删除该行,服务器发出正确的内容types,因此不需要覆盖它)。

由于脚本的运行方式与JSON不同,因此您还需要采取措施 (其中大部分但不是全部都需要您控制提供JSON的主机)才能解决相同的源策略 。

错误是因为它返回JSON而不是JSONP。

JSONP应该看起来像

 someCallBackString({ The Object }); 

这是一个工作的例子

 $.ajax({ type: 'GET', url: 'http://xxx.amazonaws.com/file.json', dataType: 'jsonp', jsonpCallback: 'callback', success: function(json){ console.log(json); } }); 

你应该把callback放在你的file.json的开头,如:

callback({"item":{".......

正如epascarello 指出的那样 ,JSONP响应必须如下发送:

 callBackFunction({ JSON Object }) 

然后可以设置来电function,如:

 var url = "http://someremoteurl.com/json"; $.getJSON(url + "?callback=?", null, function(data) { callBackFunction(data); }); 

然后你可以循环响应数据为:

 function callBackFunction(data) { console.log(data); } 

如果您使用“ callback =? ”参数,则您在服务器端的响应应如下所示:

 $_callback = $_GET['callback']; echo $_callback . '(' . json_encode(YOUR_VARIABLE) . ');'; 

如果没有定义“ callback =? ”参数,你的回应应该是这样的:

 echo '[' . json_encode($_return_array) . ']'; 

如果问题与Ruby相关,那么在你的控制器中确保你正确的渲染格式。 例:

 def view_product data = Product.find params[:id] render :json => data, :callback => params[:callback] end 

在你的render方法中,你应该有:callback参数,否则它将在json而不是jsonp中呈现。