【问题标题】:Uncaught SyntaxError: Unexpected token, not jsonp ¿but reading json?Uncaught SyntaxError: Unexpected token, not jsonp ¿ but reading json?
【发布时间】:2016-01-24 10:18:46
【问题描述】:

我是 AJAX 和 javascript 的新手,我正在尝试使用具有此结构的 api 来加入它们

http://localhost:8088/JobPositionForDd:

{
    "data": [{
        "_id": "529dc2dfd0bf07a41b000048",
        "name": "Junior Android"
    }, {
        "_id": "529dc30bd0bf07a41b00004a",
        "name": "Junior iOS"
    }]
}

像这样工作我的main.js

$(function() {
    var $JobPositionForDd = $('#JobPositionForDd');
    $.ajax({
        type: 'GET',
        dataType: 'jsonp',
        url: 'http://localhost:8088/JobPositionForDd',
        success: function(JobPositionForDd) {
            console.log('success', JobPositionForDd);
        }
    });
});

我的索引是这样的:

<!DOCTYPE html>
<html>
   <head>
      <title> Api Calls</title>
      <link rel='stylesheet' href='style.css'/>
   </head>
   <body>
      <h1> Api calls</h1>
      <h2> Job Positions</h2>
      <ul id="data"> </ul>
      <script src="jquery.js"></script>
      <script src="main.js"></script> 
   </body>
</html>

我已经阅读了很多其他帖子,有些答案说我必须取消数据类型的 jsonp,但如果我这样做,我会收到“No 'Access-Control-Allow-Origin”的错误' 请求的资源上存在标头”,因为我正在使用另一个端口 8083,因此,在 chrome 的检查元素上,给了我错误

"Uncaught SyntaxError: Unexpected token : JobPositionForDd?callback=jQuery17109280039484146982_1445751566525&_=1445751566537:2" 并将我发送到 json 的 " "data": [ "!

我不知道为什么它不起作用或至少“连接”成功,我认为这是我正在做的非常基本的事情,但仍然是错误的,如果有人可以帮助我,我会很高兴):

【问题讨论】:

    标签: javascript jquery json ajax


    【解决方案1】:

    ...意外的令牌,不是 jsonp ¿ 而是读取 json?

    JSONJSONP不同的东西。相关,但不同。

    这是 JSON 的一个简短示例:

    {"name":"value"}
    

    这是 JSONP 的一个简短示例:

    someFunctionName({"name":"value"})
    

    JSON 是一种用于数据交换的文本符号。 JSONP 是一种传输 JSON 的方法,它绕过了 ajax 的同源协议限制。基本上,它是封装在函数调用中的 JSON,您可以通过向页面添加 script 元素而不是使用 ajax 来访问它。浏览器会下载并运行“脚本”,然后您的函数会被数据调用。

    所以首先要确定的是您要使用 JSON 还是 JSONP。

    如果你想使用 JSON...

    ...那么由于同源策略,您确实需要从服务器发送额外的标头以启用Cross-Origin Resource Sharing。这不仅仅是Access-Control-Allow-Origin,还有更多。 This answer 有用于启用 CORS 的服务器端的伪代码。那么您将使用dataType 'json'(或者更好的是,确保您的服务器返回正确的Content-Type 标头,即application/json,然后完全关闭dataType)。

    如果你想使用 JSONP...

    ...那么您的服务器端需要查找callback 查询字符串参数,并在您的回复中使用该参数的值作为JSONP 回复中的函数名称。例如,如果你得到

    /some/api/path?callback=blarg

    你的回复应该是

    blarg({"name":"value"})
    

    响应的Content-Type 应该是application/javascript,因为从技术上讲,您要发回的是JavaScript。

    【讨论】:

    • 我想使用 JSON,我在 Wamp 上,所以在 httpd.conf 我添加了“ Header set Access-Control-Allow-Origin: * ”最后,并将数据类型更改为json,但我收到错误“请求的资源上不存在'Access-Control-Allow-Origin'标头。”,
    • @Sparkle:正如我所说:“不仅仅是 Access-Control-Allow-Origin,还有更多”
    猜你喜欢
    • 1970-01-01
    • 2018-06-18
    • 2013-06-28
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 2013-02-12
    相关资源
    最近更新 更多