【问题标题】:jQuery GET not sending IE in browsersjQuery GET 不在浏览器中发送 IE
【发布时间】:2011-06-03 06:48:20
【问题描述】:

我正在处理的项目中有以下代码块:

if(!validate($(".emailbody input").val())){
    ...
}
else{
    $.get("https://get.request.com/something", {email:encodeURI($(".emailbody input").val())})
    .complete(function(){
        $(".emailbody").append($('<p class="emailsucess">Kiitos! Linkki rekisteröitymisen jatkamiseen on lähetetty sähköpostiisi: '+$(".emailbody input").val()+'</p>'));
        $.post("http://post.request/confirm.php", {"confirm":$(".emailbody input").val()})
        $(".emailbody input").val("");
    });
}

一个简单的 get 请求将内容放入连接服务的数据库中,然后一个 post 响应从本地主机发出一封邮件。

我的问题是这样的:

在除 IE(任何版本)之外的所有其他浏览器中,这都能正常工作并且没有任何问题,但是对于 IE,GET 调用甚至不会出现在网络流量中,它会被忽略,不会被调用,而是完整的呼叫仍然像通过 OK 一样进行!

这是 https 服务的问题,还是我遗漏了什么?

更新: 我通过对本地文件发出 post 调用解决了这个问题,该文件在 GET 请求上 ping 到外部服务器,所以现在可以工作,但它是一种愚蠢的做事方式。任何能对此有所了解的人将不胜感激。

【问题讨论】:

  • 尝试在末尾添加一个随机值变量,或者一个时间戳。 IE 有缓存请求的坏习惯。
  • 似乎没有帮助,即使更改发送的地址/添加时间戳变量,它似乎仍然没有尝试发送。
  • https://get.request.com 与页面所在的域相同吗?发送页面也已经在 https 上了?

标签: jquery ajax internet-explorer post get


【解决方案1】:

似乎是一个缓存问题。 GET 请求可以被缓存,因此您可以尝试将随机查询字符串参数附加到 url 以避免这种情况。或者使用$.ajaxcache: false

$.ajax({
    url: 'https://get.request.com/something',
    type: 'GET',
    data: { email: $(".emailbody input").val() } // <-- note that you don't need to encode here, jQuery will take care of this
    cache: false,
    success: function(result) {
        ...
    }
});

还要确保您尊重same origin policy restriction。确保这一点的最佳方法是使用相对 url。所以而不是:

'https://get.request.com/something'

使用:

'/something'

【讨论】:

  • 不可能使用相同的来源策略,因为当我在 http 中时,我试图从 https 服务获得响应,所以相对值不起作用。我不认为这是一个缓存问题,因为即使您第一次这样做,它也不会加载请求,而不仅仅是在后续尝试中,所以它没有机会缓存​​。还有其他想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 2015-12-03
  • 2017-12-06
  • 2019-03-28
  • 1970-01-01
  • 2012-12-09
相关资源
最近更新 更多