将 jsonp 转换为 json [关闭]

Posted

技术标签:

【中文标题】将 jsonp 转换为 json [关闭]【英文标题】:Convert jsonp to json [closed] 【发布时间】:2012-12-25 08:25:15 【问题描述】:

这是我的代码

$.ajax(
    type: "GET",
    url: "http://example.com?keyword=r&callback=jsonp",
    success: function (data) 
        alert(data);
    ,
    dataType: "jsonp",
    error: function (xhr, errorType, exception) 
        var errorMessage = exception || xhr.statusText;
        alert("Excep:: " + exception + "Status:: " + xhr.statusText);
    
);

好的,所以上面的代码工作正常,我得到的数据是 jsonp。现在我不知道如何将 jsonp 转换为 json。

【问题讨论】:

没有“json 对象”这样的东西。 JSON是字符串形式的跨平台序列化数据。它也不同于 JSONP。正如@FelixKling 所说,如果您正确执行所有操作,jQuery 会自动将其解析为一个对象。 你不应该在 URL 中添加&callback=jsonp,jQuery 会处理这个问题。此外,如果一切正常,data 应该已经是您需要的 JS 对象。那么,你的问题到底是什么? data 是什么? 了解 JSONP:***.com/questions/3839966/… 确保您的服务器在返回请求时将您的 JSON 转换为 JSONP。它需要被包装在一个函数调用中。 @FelixKling 实际上,如果我不向 url 添加回调,它就无法正常工作,因为我附加了 &callback=jsonp 。它是一个外部 url,并说明它将如何工作 【参考方案1】:

现在我不知道如何将 jsonp 转换为 json。

那是没有意义的。您想要的是一个可以使用的普通 javascript 对象,并且您已经拥有它 (data)。


JSONP 是一个脚本文件,其中使用对象字面量调用函数。文字看起来像 JSON,而函数(其名称是动态生成的)是 padding

JSON 是包含JavaScript Object Notation 数据的文件/字符串,这是一种常见的序列化格式。

【讨论】:

【参考方案2】:

这篇文章可能会给你一些额外的指导:Basic example of using .ajax() with JSONP?

能否提供一个请求返回的数据结构示例?

在您的特定情况下,您可能可以执行以下类似的操作。让我知道结果如何:

// Create the function the JSON data will be passed to.
function myfunc(json) 
  alert(json);


$.ajax(
  type: "GET",
  url: "http://example.com?keyword=r&callback=jsonp",
  dataType: 'jsonp',
  jsonpCallback: 'myfunc', // the function to call
  jsonp: 'callback', // name of the var specifying the callback in the request
  error: function (xhr, errorType, exception) 
    var errorMessage = exception || xhr.statusText;
    alert("Excep:: " + exception + "Status:: " + xhr.statusText);
  
);

【讨论】:

所以我应该从 ajax 中删除成功 其实 JSONP 根本不是 JSON,它只是 JavaScript 代码。 在这种情况下没有理由进行评估...您可以在全局定义该函数后简单地执行<script src="http://example.com?keyword=r&callback=jsonp"></script>。如果您必须使用 jQuery 来执行请求,jquery 还提供了使用特定 jsonp 回调发出同域 jsonp 请求的方法。 没有理由感到被冒犯或冒犯......只是想澄清一些事情。另外我不确定eval(data) 是否可以在这里工作。我不认为 jQuery 将脚本的源代码传递给成功回调,因为 JSONP 的工作方式(我认为它甚至不可能获取源代码)。 jQuery 实际上足够聪明,可以检测到 URL 中的 callback=jsonp 创建,创建一个具有这样名称的函数,以便从脚本调用它并将结果传递给成功回调。请参阅:jsfiddle.net/Q42Mb/1。 eval 在这种情况下不做任何事情。【参考方案3】:

你需要一个函数:

function jsonp(data)
    // do stuff with data here

返回数据时自动调用函数/

【讨论】:

【参考方案4】:

如果您收到来自alert(data) 的警报,则它已经被转换。你应该得到[object Object],它应该告诉你你有一个JavaScript对象。现在您可以像访问任何其他 JavaScript 对象一样访问它的属性了。

alert(data.foo);

它也可能是一个数组,具体取决于返回的 json。

【讨论】:

以上是关于将 jsonp 转换为 json [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Typescript / Angular2:将 JSON 转换为与 Observable 和 JSONP 接口

在节点中将 JSONP 响应字符串转换为 JSON

如何将 Json 转换为 NSDictionary? [关闭]

将 JSON 转换为元素树 [关闭]

如何将多维数组转换为json对象[关闭]

将 CSV/XLS 转换为 JSON? [关闭]