IE8中的jQuery ajax调用错误

IE8中的jQuery ajax调用错误,jquery,ajax,internet-explorer-8,Jquery,Ajax,Internet Explorer 8,我有一个基于jQuery的相当简单的ajax调用。它在IE9、Firefox最新版本和Chrome最新版本中都能完美工作(因此我非常确定AJAX调用发布到的页面是好的),但在IE8(未尝试IE7)上它失败了 jQuery代码是: $('.to-step-2').click(function(){ var d = new Date(); var roomShape; blnError = false; $.ajax({ url: '/base/RoomBuilder/Get

我有一个基于jQuery的相当简单的ajax调用。它在IE9、Firefox最新版本和Chrome最新版本中都能完美工作(因此我非常确定AJAX调用发布到的页面是好的),但在IE8(未尝试IE7)上它失败了

jQuery代码是:

$('.to-step-2').click(function(){
  var d = new Date();
  var roomShape;
  blnError = false;
  $.ajax({
    url: '/base/RoomBuilder/GetRoomShape.aspx?_='+d.getTime(),
    async: false,
    type: 'post',
    cache: false,
    dataType: 'html',
    success: function(data){
      if(data.substring(0,5) == 'Error'){
        alert('Please select a room shape to continue');
        blnError = true;
      }else{
        roomShape = data;
      }
    },
    error: function(jqXHR, textStatus, errorThrown){
      alert('Error 6: jqXHR = ' + jqXHR + '\ntextStatus = ' + textStatus + '\nerrorThrown = ' + errorThrown);
      blnError = true;
    }
  });    
  if (blnError == true){
    return false;
  }
仅在IE8中引发的错误为:

Error 6: jqXHR = [object Object]
textStatus = error
errorThrown = Length Required
我已经看到了一些关于类似事情的其他帖子,但是添加timestamp和cache:false以防止缓存似乎是非常常见的解决方案,但仍然不适用于我:(

有人能看到为什么会发生这种情况并提出解决方案吗?

您的服务给您带来了好处:

411所需长度

服务器拒绝接受没有定义内容长度的请求。如果客户端在请求消息中添加包含消息正文长度的有效内容长度标头字段,则可能会重复该请求

这是因为如果没有数据,jQuery在发布时不会设置内容长度标题。这是发布到IIS时的安全要求:

根本问题是,IIS6+的大多数安装要求在所有POST请求中提供内容长度,即使没有内容(POST数据)

没有数据的请求的内容长度应为0,但除非有数据参数,否则jQuery不会自动设置该标头。由于ASP.NET AJAX的JSON序列化服务需要POST请求,这成为只读请求的绊脚石

(引自)

简单地将数据参数设置为空对象似乎是最简单的解决方法:

$.ajax({
url: '/base/RoomBuilder/GetRoomShape.aspx?_='+d.getTime(),
async: false,
type: 'post',
cache: false,
data: "{}",
dataType: 'html',
success: function(data){
  if(data.substring(0,5) == 'Error'){
    alert('Please select a room shape to continue');
    blnError = true;
  }else{
    roomShape = data;
  }
}

根据错误:errorshown=Length Required,尝试添加虚拟数据,如:


$.ajax({
    url: '/base/RoomBuilder/GetRoomShape.aspx?_='+d.getTime(),
    async: false,
    type: 'post',
    cache: false,
    dataType: 'html',
    data: {},
    .....

希望它能工作。

数据:“{}”
可能是正确的,相应地改变了。谢谢Sudhir-虽然需要花括号周围的引号,但对于那些它确实有效的。看看