如何在 jQuery ajax 调用中将 JSON 响应解析为 JSONP?

Posted

技术标签:

【中文标题】如何在 jQuery ajax 调用中将 JSON 响应解析为 JSONP?【英文标题】:How to parse a JSON response as JSONP on a jQuery ajax call? 【发布时间】:2017-03-10 23:26:55 【问题描述】:

我正在处理 todoist API (https://developer.todoist.com/),我正在使用 jquery ajax 获取一些数据的请求:

var url = "https://todoist.com/API/v7/sync";
var data = 
    'token' : token,
    'resource_types' : '["all"]',
    ;


$.ajax(
    url: url,
    data: data,
    type: 'GET',
    dataType: 'jsonp',
    success: function(response)  

        console.log(response);

    ,
    error: function(response)  
        console.log('error');
    ,
);

现在,当我得到响应时,我得到了错误

Unexpected token :

为什么?因为根据 (https://***.com/a/7941973/2724978) jQuery 期望一个 jsonp 格式的响应,但它返回 json。

我已经研究过如何解决这个问题,得到的回应是:“以 jsonp 格式返回数据”......好吧。这是一个外部 API,它们不提供 JSONP 格式的数据。有没有办法可以覆盖返回的函数并解析这个 JSON 数据?

【问题讨论】:

是否定义了token?链接文档建议使用POST request “同步 API 请求应在 HTTP POST (application/x-www-form-urlencoded) 中进行。同步 API 响应(包括错误)将以 JSON 格式返回。”我>? 定义好了,是的 【参考方案1】:

您的数据类型应该是json,而不是jsonp

【讨论】:

似乎正确。我自己测试了一下...谢谢!【参考方案2】:

正如 elektronik 指出的那样,dataType 应该是 json 而不是 jsonp。代码如下所示...

var token = "your token"
var url = "https://todoist.com/API/v7/sync";
var data = 
    'token' : token,
    'resource_types' : '["all"]',
    ;

jQuery.ajax(
    url: url,
    data: data,
    type: 'GET',
    dataType: 'json',
    success: function(response)  
        console.log(response);
    ,
    error: function(response)  
        console.log('error');
    ,
);

【讨论】:

以上是关于如何在 jQuery ajax 调用中将 JSON 响应解析为 JSONP?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Struts 2 中将 JSON 绑定到 bean

如何使用 Json 数据作为参数进行 Jquery Ajax 调用?

如何从 2.0 asmx Web 服务返回 JSON

如何使用 AJAX 和 JQuery 使用 JSON 数据实现 PUT 调用?

如何在jquery数据表的ajax调用中发布参数

如何从MVC5中的jquery ajax调用中获取部分视图和JSON数据?