javascript - AJAX 调用并清理 JSON 但语法错误 : missing ; before statement

标签 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"
}]}

提前致谢。

最佳答案

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

您得到的响应是 JSON,而不是 JSONP,因此您将其作为 JSONP 处理的努力失败了。

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

由于您的脚本在与 JSON 不同的来源上运行,因此您还需要 take steps (大多数,但不是全部,其中需要您控制服务 JSON 的主机)来解决 same origin policy .

关于javascript - AJAX 调用并清理 JSON 但语法错误 : missing ; before statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19456146/

相关文章:

javascript - 不同球质量的真实球碰撞 - 小球阻止大球

javascript - 根据其他选择菜单清除选择菜单

php - XMLHttpRequest ReadyState 始终未定义

javascript - 如何获取smtp uri

javascript - jQuery 附加变量作为 src

php - 使用 jquery 在父标签之外附加 html

javascript - Ajax 它只向我显示网址中的一个垫

jquery - 当一个 DIV 打开时,如何使文本停止移动?

javascript - jQuery .click() 在 Firebug 中有效,但在 Greasemonkey 脚本中无效?

javascript - 转换 Javascript 数据表以在 Rails 应用程序中使用 Opal