强制JSONP调用将文本响应转换为JSON
Forcing a JSONP call to convert text response to JSON
如果我有以下请求
$.ajax({
type: "GET",
dataType: "jsonp",
jsonp: "callback",
jsonpCallback: "my_callback",
url: my_https_url,
headers:{"Content-Type":"text/html; charset=utf-8"},
success: function(data) {
eval("json="+data);
}
error: function() {
console.log("fail");
}
});
我得到一个200状态码的服务器响应。响应头表示它正在返回文本/html作为内容类型。但是,我知道内容实际上是格式化的JSON数据。问题是服务器没有配置为接受JSONP请求(我无法更改它)。出于与跨域相关的原因,我正在使用JSONP方法。我得到的错误状态是"parseerror",因为它不能被识别为JSON。是否有一种方法可以覆盖负责解析数据的函数,以便我可以强制将其视为JSON?可能使用eval()?
如果您的服务器不能创建JSONP格式的响应,而由于同源限制而不得不使用JSONP,那么您就太不走运了。JSONP格式的响应采用可执行脚本的形式,该脚本调用指定的回调。
通常不能从不同的源获取JSON。您要么需要JSONP,要么需要一个配置了允许跨域请求的服务器的现代浏览器。如果不能将服务器配置为允许跨源请求,则需要服务器创建JSONP。如果它不这样做,那么你就不能从它那里获得数据。JSONP是跨域请求的一种解决方案,它需要服务器合作来为响应创建JSONP格式的结构。
如果你从服务器得到JSONP结构,而jQuery在试图解析响应为JSON时得到解析错误,那么这是因为服务器发送的不是JSONP结构内部的合法JSON。你得到一个解析错误的事实意味着jQuery正在尝试将其解析为JSON,并在尝试这样做时得到一个错误。如果是这种情况,那么您有两个选择:
- 修复服务器发送的数据为100%合法JSON。
- 接受数据作为文本,并将其修复为合法的JSON或以某种方式自己解析它,接受它的方式。
在任何一种情况下,第一步可能是console.log()
正在发送的文本,并准确理解为什么它不被接受为合法的JSON。然后,你会更好地知道你的选择是什么。如果您需要帮助来理解这一点,那么请为您的问题添加确切的服务器响应。
- 转换 JSON 日期,不考虑时区
- 转换 JSON 文件
- 使用正则表达式转换 JSON 密钥值
- 如何通过javascript转换JSON中的DC2type:数组和DC2type中的JSON
- 转换json中的整数值
- 转换JSON架构格式
- 转换JSON "/日期(1404860400000)"到javascript日期
- 在js中转换json数组
- 检索原始日期值转换JSON.stringify
- Java脚本转换json数据
- 用JS转换JSON字符串
- 转换JSON数组的对象,从两个属性值创建新的属性
- 在AngularJs中转换JSON对象
- 需要转换JSON格式
- 转换JSON中的字符串
- 如何转换json数组的JS
- jQuery UI自动完成与预转换json url
- 使用递归转换json数据
- 如何在jquery中转换json格式的数组
- 如何转换json没有& quot;