AJAX调用和清理JSON但语法错误:缺失;在声明之前

时间:2013-10-18 17:57:31

标签: javascript jquery ajax json jsonp

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

enter image description here

SyntaxError: missing ; before statement

然而,当我通过像jsonlint.com这样的工具传递我的json对象(可通过JQ代码中的链接获得)时,它说它是有效的JSON。我也没有发现任何异常现象。怎么会返回语法错误?是一些我没有得到的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"
}]}

提前致谢。

6 个答案:

答案 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呈现。