2009-11-28 110 views
6

我试图调试为什么我的AJAX得到的理由/后没有工作在IE 7/8jQuery的AJAX不工作的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中使用。但我没有在IE 7/8中正常工作。我下载了fiddler并观看了调用,脚本应该发送数据到服务器,然后重新加载现在具有新更新信息的HTML。发生了什么事是第一次调用会得到一个错误500,但是,当html重新加载后,再次执行相同的操作时,它将以200ms发送,所以它表现出它不存储,它只做第二次尝试。

有什么我做错了,还是我需要添加的东西?这是一个php循环,所以这个函数被应用到页面上20-30项的同一链接上。

+0

你为什么要做2个Ajax调用?当你提出要求“/ places/set_member/add /”来保​​存时,返回你需要的html,而不是再做一次ajax调用来获取它。 – PetersenDidIt 2009-11-28 21:42:25

+0

不是一个糟糕的想法,我对这一切都比较陌生,所以不知道该怎么做。 – matthewb 2009-11-28 21:51:27

回答

12

IE缓存所有非POST类型的ajax调用。我发现最好是让所有Ajax调用POST以避免IE执行此操作,即使发布空数据也是如此。

或者你可以做以下@redsqaure和建议这样做:

$ .ajaxSetup({缓存:假})

+0

我会尝试,所以我看到的第一个500内部错误的原因是,因为请求已经发送和缓存? – matthewb 2009-11-28 22:13:29

+0

谢谢,通过做1帖子,并返回该html修复了我的问题,我不再做GET的任何事情。 – matthewb 2009-11-28 22:38:11

+7

只需使用全局$ .ajaxSetup({cache:false})。这将关闭所有xhr请求的缓存。不要发布,当你想得到.... – redsquare 2009-11-29 01:01:16

2

IE高速缓存ajax调用。请确保在呼叫中包含随机数字或随机字符串,例如&rand=[some randomly generated something],然后再次尝试。

0

终于来了! 我解决我的问题,就是因为“同源策略”,只是在IE中提高!: 的我刚刚从改变URL参数:“http://mysite.com/api/”'/ api /' 它工作!

希望它能帮助你们中的一些人!

-1

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

url: '' 

...一个jQuery的AJAX调用,这将张贴到自身。

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

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

不知道为什么你有一个投票。这是我确切的问题。谢谢! – Jeremy 2014-03-23 23:06:43

4

如果你不需要你的数据类型是HTML,你可以试试这个。

$.ajax({   
    url: 'Enter URL' 
    dataType: 'jsonp', 
    type: 'get', 
    success: function (data) { } 
}); 
0

我有与jQuery 2.0.2相同的问题。我将jQuery改为1.8.1,Ajax在IE中完美运行。