2009-11-28 8 views
6

ich den Grund zu debuggen bin versucht, warum meine Ajax erhalten/Post funktioniert nicht in IE 7/8JQuery AJAX nicht funktioniert auf IE 7/8

Hier mein Code:

$.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(); 
          }}); 

Nun ist diese funktioniert gut in FF Safari Win/Mac, aber nicht in IE 7/8

Ich heruntergeladen fiddler und beobachtete die Anrufe, das Skript soll Daten an den Server senden und dann neu laden die HTML, die jetzt neue aktualisierte Informationen hat. Was passiert, ist der erste Aufruf erhält einen Fehler 500, aber dann, nachdem der HTML-Code neu geladen wird, und die gleiche Aktion wird erneut durchgeführt, wird es mit 200ms senden, so dass es das Aussehen, dass es nicht speichert, was es nur tut beim zweiten Versuch.

Gibt es etwas, das ich falsch mache, oder etwas, das ich hinzufügen muss? Dies ist eine PHP-Schleife, also wird diese Funktion auf 20-30 Elemente auf der Seite auf denselben Link angewendet.

+0

Warum machst du 2 Ajax-Anrufe? Wenn Sie Ihre Anfrage an "/ places/set_member/add /" zum Speichern senden, geben Sie das HTML zurück, das Sie benötigen, und dann einen weiteren Ajax-Aufruf, um es zu erhalten. – PetersenDidIt

+0

Kein schlechter Gedanke, ich bin ziemlich neu in all dem, also war ich mir nicht sicher, wie ich das machen sollte. – matthewb

Antwort

12

IE speichert alle AJAX-Aufrufe, die nicht POST-Typ sind. Ich habe festgestellt, dass es am besten ist, alle Ajax-Aufrufe POST zu machen, um zu vermeiden, dass IE dies tut, selbst wenn Sie leere Daten posten.

Oder Sie können tun, wie @redsqaure dies unten und tun schlägt vor:

$ .ajaxSetup ({Cache: false})

+0

Ich werde das versuchen, also der Grund, warum ich den ersten 500 internen Fehler sehe, ist, weil die Anfrage bereits vorher gesendet und zwischengespeichert wurde? – matthewb

+0

Danke, indem Sie 1 Post und haben, dass die HTML-Fixes mein Problem, ich bin nicht mehr GET's für alles. – matthewb

+7

verwenden Sie einfach das globale $ .ajaxSetup ({cache: false}). Dies schaltet den Cache für alle xhr-Anforderungen aus.Schreiben Sie nicht, wenn Sie möchten .... – redsquare

2

IE speichert AJAX-Aufrufe. Stellen Sie sicher, dass Sie eine Zufallszahl oder eine zufällige Zeichenfolge in Ihren Anruf einfügen, z. B. &rand=[some randomly generated something], und versuchen Sie es erneut.

0

Endlich! löste ich mein Problem, das wegen der "Same Origin Policy" und heben nur in IE !: Ich habe gerade die von URL Parameter ändern: 'http://mysite.com/api/' zu '/ api /' und es funktioniert !!!

hoffe es hilft ein paar von euch!

-1

In den meisten Browsern können Sie angeben:

url: '' 

... für einen Ajax-Aufruf jQuery und diese an sich selbst wird.

In IE müssen Sie eine URL angeben.

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

Nicht sicher, warum Sie eine Abstimmung unten haben. Das war mein genaues Problem. Vielen Dank! – Jeremy

4

Wenn Sie Ihren Datentyp nicht als HTML benötigen, können Sie dies versuchen.

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

Ich hatte das gleiche Problem mit jquery 2.0.2. Ich änderte die JQuery zu 1.8.1 und Ajax arbeitete perfekt in IE.