将 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 接口