首页 文章

强制JSONP调用将文本响应转换为JSON

提问于
浏览
0

如果我有以下要求

$.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状态代码的服务器响应 . 响应标头表示它正在发送text / html作为内容类型 . 但是,我知道内容实际上是格式化的JSON数据 . 问题是服务器未配置为接受JSONP请求(我无法更改它) . 我正在使用JSONP方法来解决跨域相关的问题 . 我得到的错误状态是“parseerror”,因为它不被识别为JSON . 有没有办法覆盖负责解析数据的函数,以便我可以强制它被视为JSON?可能使用eval()?

1 回答

  • 3

    如果您的服务器无法创建JSONP格式的响应,并且由于相同来源的限制而必须使用JSONP,那么您只是运气不好 . JSONP格式的响应采用可执行脚本的形式,可调用指定的回调 .

    您通常无法从其他来源获取JSON . 您需要JSONP,或者您需要一个现代浏览器,其服务器配置为允许跨源请求 . 如果您无法将服务器配置为允许跨源请求,那么您需要服务器来创建JSONP . 如果不这样做,那么你就无法从中获取数据 . JSONP是跨源请求的解决方案,它需要服务器合作来为响应创建JSONP格式的结构 .


    如果你从服务器获取JSONP结构,并且jQuery在尝试将响应解析为JSON时收到解析错误,那就是因为服务器发送的内容不是JSONP结构内部的合法JSON . 你得到一个解析错误的事实意味着jQuery试图将其解析为JSON,并在尝试这样做时遇到错误 . 如果是这种情况,那么您有两种选择:

    • 修复服务器发送的数据为100%合法JSON .

    • 将数据作为文本接受并将其修改为合法的JSON,或者以某种方式自行解析,以接受它的方式 .

    在任何一种情况下,第一步可能是 console.log() 正在发送的文本,并准确理解为什么它更好地知道您的选项是什么 . 如果您需要帮助理解,请在问题中添加确切的服务器响应 .

相关问题