【问题标题】:Ajax Call empty response on Google chrome MobileGoogle chrome Mobile 上的 Ajax 调用空响应
【发布时间】:2017-05-30 13:17:42
【问题描述】:

我搜索了一个可以解决我很多问题的答案,但没有一个主题适合我的场景..

我必须在我的应用程序中进行 AJAX 调用,它在所有桌面浏览器和某些移动浏览器上都可以正常工作(例如在我的华硕 zenPhone 原生浏览器上它可以正常工作,即使在我上班的 iPhone 上也能正常工作(FF 和 Safari) ))但在谷歌浏览器(移动)中没有办法,在这个调用完成但响应它是空的(只有空的,没有提供错误)......我问一些朋友也对其进行测试并出现类似的结果(空响应)....我有一个 https 服务器和一个 https 端点

这是我的代码:

<script>
var x = Math.floor((Math.random() * 10000000) + 2000);
var data = JSON.stringify({
  "Token": x,
  "Subject": "testAPI"
});

var xhr = new XMLHttpRequest();


xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    //console.log(this.responseText);
    var dataJ = JSON.parse(this.responseText);
    var dataA = dataJ.Questions;
    alert(dataA[0].img);//this is already empty on my mobile :(
    dataA.forEach(function(entry) {
      //console.log(entry);
    });
  }
});

xhr.open("POST", url);
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("cache-control", "no-cache");

xhr.send(data);


</script>

服务器端 CORS 已启用,正如我所说,它在我测试过的所有桌面上都能完美运行......我不知道我是否可以向你们提供 url(我必须向 API 提供者询问)但是如果你能给我一些提示,那就太好了......

非常感谢您的宝贵时间!

[编辑]

在遇到一些问题后,我得到了一个错误(使用开发工具从我的手机远程测试到我的电脑)

加载资源失败:net::ERR_INSECURE_RESPONSE

在其他设备上我没有收到此错误...

【问题讨论】:

    标签: javascript ajax google-chrome xmlhttprequest cors


    【解决方案1】:

    这是一个很长的镜头,但是,尝试将内容类型标题设置为:

    xhr.setRequestHeader("content-type", "text/plain");
    

    这应该抑制由 chrome 完成的导致空响应的 CORS 预检。

    【讨论】:

    • 以这种方式,API 不再接受数据 - 令牌 .. 我不能自己编码服务器端:(
    • 当您更改内容类型标头时,它会给您一个错误/拒绝访问响应吗?
    • 是的,我认为这是一个编码错误(服务器端):错误:重复的令牌:未定义
    • 原来是证书问题,服务器端....我能够使用远程谷歌控制台找到错误..感谢您的时间!
    猜你喜欢
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2013-07-29
    • 2018-04-18
    • 2011-03-05
    • 2015-04-07
    相关资源
    最近更新 更多