Jquery AJAX在IE 7/8上无法工作

6

我正在尝试调试为何我的ajax get/post在IE 7/8中无法正常工作。

这是我的代码:

$.ajax({type: "POST", dataType:'html',url: "/places/set_member/add/",data: "place_id="+place_id ,
                       beforeSend:  function() {$("<span class='notice'>Saving...</span>").prependTo('body');},
                       success: function(){
                        $.ajax({type:"GET",url:url,success:function(html){$('div.place-list .ui-tabs-panel').html(html);},complete:function(){resetAddThis();}})
                       },
               complete: function() {
                            $('span.notice').fadeOut(500);
                $('span.notice').remove();
                            }});

现在这个在FF Safari Win/Mac上运行良好,但在IE 7/8上不行。

我下载了fiddler并观察了调用,脚本应该将数据发送到服务器,然后重新加载HTML,其中包含新的更新信息。但是发生的情况是第一个调用会得到错误500,但是在重新加载HTML之后,再次执行相同的操作,它将在200ms内发送,因此它看起来没有保存,但只有在第二次尝试时才保存。

我做错了什么,还是需要添加什么?这是一个php循环,因此该函数被应用于页面上20-30个项目的同一链接。


你为什么要发起两个ajax调用?当你向“/places/set_member/add/”发送保存请求时,返回所需的HTML,而不是再发起另一个ajax调用来获取它。 - PetersenDidIt
不错的想法,我对这一切还很新,所以不确定该如何做。 - matthewb
6个回答

13

IE缓存所有不是POST类型的ajax调用。我发现最好将所有Ajax调用都设置为POST,以避免IE这样做,即使您提交空数据也是如此。

或者您可以像@redsqaure建议的那样执行以下操作:

$.ajaxSetup({cache:false})


我会尝试一下,所以我看到第一个500内部错误的原因是因为请求已经在之前被发送并缓存了? - matthewb
谢谢,通过进行1个帖子并返回HTML来修复我的问题,我不再为任何事情做GET请求。 - matthewb
7
只需使用全局的$.ajaxSetup({cache:false}),这将关闭所有xhr请求的缓存。当您想获得...时,请不要发帖。 - redsquare

4
如果你不需要数据类型为HTML,可以尝试使用这个。
$.ajax({        
  url: 'Enter URL'
  dataType: 'jsonp',
  type: 'get',
  success: function (data) { }
});

2

IE会缓存ajax调用。请确保在您的调用中包含一个随机数或随机字符串,例如&rand=[一些随机生成的内容],然后再尝试一次。


0
我在使用jQuery 2.0.2时遇到了同样的问题。我将jQuery更改为1.8.1,这样Ajax就可以在IE中完美地工作了。

0
终于解决了我的问题,这是因为“同源策略”在IE中引起的!我只是将URL参数从:'http://mysite.com/api/'更改为'/api/',然后它就可以工作了!!希望能对你们中的一些人有所帮助!

-1

在大多数浏览器中,您可以指定:

url: ''

...用于jQuery的ajax调用,这将向自身发送POST请求。

在IE中,您必须提供一个URL。

url: '/relative/path/to/script'

不确定为什么你被踩了。这正是我的问题。谢谢! - Jeremy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接