JSONP 不能使用来自 API 的结果

Posted

技术标签:

【中文标题】JSONP 不能使用来自 API 的结果【英文标题】:JSONP cannot use results coming from API 【发布时间】:2019-07-09 03:46:36 【问题描述】:

我试图运行这个 ajax 请求来获取一堆项目并至少记录它们:

在控制台中,项目显示为未定义:

但在网络选项卡中,我可以看到我试图从 API 调用的项目:

我很困惑,因为没有触发错误或成功功能。

源代码:

<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
    <link rel="stylesheet" type="text/css" href="css/fontawesome-free-5.6.3-web/css/all.css">
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="./css/main.css">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

<body>

</body>

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>


<script>
    console.log("alive");

      $.ajax(
                type: "GET",
                url: "http://127.0.0.1:3000/api/stories?callback=items",
                dataType: 'jsonp',
                jsonpCallback: 'items',
                jsonp: 'callback',
                success: function(data) 
                    var strData = JSON.stringify(data);
                    console.log(strData);
                ,
          error: function(xhr,status,error) 
                    console.log(status);
                    console.log(error);
          
      );


    console.log(items());

    </script>
</html>

【问题讨论】:

您的 API 返回的是 JSON,而不是 JSONP。 JSONP 响应看起来像items([ ... ]); 这是对callback 函数的调用,对象作为函数参数。 【参考方案1】:

试试 dataType:JSON 您的 API 返回的是 JSON,而不是 JSONP。

【讨论】:

由于跨域问题不能这样做(api端口与网站不同) 对于跨源有一个棘手的解决方法,您可以使用它下载您的问题临时解决。 chrome.google.com/webstore/detail/allow-control-allow-origi/….【参考方案2】:

你有跨域问题吗?你想尝试使用 jsonp 吗?

【讨论】:

是的,这就是我想要做的。

以上是关于JSONP 不能使用来自 API 的结果的主要内容,如果未能解决你的问题,请参考以下文章

关于Jsonp 跨域

一个解决跨域问题的代理小工具

同源策略:JSONP和CORS

在跨域请求中捕获 JSONP 错误

jsonp跨域

简单理解jsonp原理