Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 强制JSONP调用将文本响应转换为JSON_Javascript_Jquery_Ajax_Json_Jsonp - Fatal编程技术网

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

Javascript 强制JSONP调用将文本响应转换为JSON,javascript,jquery,ajax,json,jsonp,Javascript,Jquery,Ajax,Json,Jsonp,如果我有以下要求 $.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

如果我有以下要求

$.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()?

如果您的服务器无法创建JSONP格式的响应,并且由于同源限制,您必须使用JSONP,那么您就是运气不佳。JSONP格式的响应是以调用指定回调的可执行脚本的形式出现的

通常无法从其他来源获取JSON。您要么需要JSONP,要么需要一个现代浏览器,该浏览器带有一个配置为允许跨源请求的服务器。如果无法将服务器配置为允许跨源请求,则需要服务器创建JSONP。如果它不能做到这一点,那么你就无法从中获取数据。JSONP是跨源请求的一种变通方法,它需要服务器协作来为响应创建JSONP格式的结构


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

  • 修复服务器发送的数据为100%合法JSON
  • 将数据作为文本接受,并将其固定为合法的JSON,或者自己以某种方式对其进行解析,使其按原样接受

  • 在任何一种情况下,第一步都可能是
    console.log()
    发送的文本,并准确理解为什么它不被接受为合法的JSON。那么,你最好知道你的选择是什么。如果您想了解这一点,请在问题中添加确切的服务器响应。

    如果您的服务器无法创建JSONP格式的响应,并且由于相同的源限制,您必须使用JSONP,那么您就是运气不佳。JSONP格式的响应是以调用指定回调的可执行脚本的形式出现的

    通常无法从其他来源获取JSON。您要么需要JSONP,要么需要一个现代浏览器,该浏览器带有一个配置为允许跨源请求的服务器。如果无法将服务器配置为允许跨源请求,则需要服务器创建JSONP。如果它不能做到这一点,那么你就无法从中获取数据。JSONP是跨源请求的一种变通方法,它需要服务器协作来为响应创建JSONP格式的结构


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

  • 修复服务器发送的数据为100%合法JSON
  • 将数据作为文本接受,并将其固定为合法的JSON,或者自己以某种方式对其进行解析,使其按原样接受

  • 在任何一种情况下,第一步都可能是
    console.log()
    发送的文本,并准确理解为什么它不被接受为合法的JSON。那么,你最好知道你的选择是什么。如果您想了解这一点,请在问题中添加确切的服务器响应。

    如果您的服务器无法创建JSONP格式的响应,并且由于相同的源限制,您必须使用JSONP,那么您就是运气不佳。JSONP格式的响应是以调用指定回调的可执行脚本的形式出现的

    通常无法从其他来源获取JSON。您要么需要JSONP,要么需要一个现代浏览器,该浏览器带有一个配置为允许跨源请求的服务器。如果无法将服务器配置为允许跨源请求,则需要服务器创建JSONP。如果它不能做到这一点,那么你就无法从中获取数据。JSONP是跨源请求的一种变通方法,它需要服务器协作来为响应创建JSONP格式的结构


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

  • 修复服务器发送的数据为100%合法JSON
  • 将数据作为文本接受,并将其固定为合法的JSON,或者自己以某种方式对其进行解析,使其按原样接受

  • 在任何一种情况下,第一步都可能是
    console.log()
    发送的文本,并准确理解为什么它不被接受为合法的JSON。那么,你最好知道你的选择是什么。如果您想了解这一点,请在问题中添加确切的服务器响应。

    如果您的服务器无法创建JSONP格式的响应,并且由于相同的源限制,您必须使用JSONP,那么您就是运气不佳。JSONP格式的响应位于