2009-04-12 18 views
5

Ich habe einen Code-Schnipsel wie dieses

var searchurl="http://mysite.com/searchpath?q=test"; 
$.ajax({ 
    type: "GET", 
    url: searchurl, 
    cache: false, 
    dataType : "jsonp", 
    async : false, 
    success: function(data){ 
     alert("success"); 
    } 
}); 
alert("outside ajax"); 

Das Problem ist, dass ich nicht async bei der Arbeit bin zu sehen. "Outside Ajax" ist das erste Popup, das ich bekomme und "Erfolg" das zweite. Gibt es etwas Offensichtliches, dass ich vermisse?

Hinzufügen von meinen Kommentaren zu Anothny Antwort

Mein Test env ist xp sp2, FF 3.0.8/w Firebug + IE 8. und JQuery v1.3.2 gewinnen. Es gibt nichts Offensichtliches, das ich vom Feuerwanzen finden konnte.

Möchten Sie oben genannten Code mit dieser URL versuchen "http://pipes.yahoo.com/pipes/pipe.run?_id=1nWYbWm82xGjQylL00qv4w&_render=json&textinput1=obama&_callback=?"

+0

Versuchen Sie ohne "Jsonp?" Könnte sein, dass Jsonp mit Async nicht kompatibel ist –

+0

Jason, das hilft nicht. –

+0

JSONP verwendet AJAX nicht technisch, es verwendet ein "Skript" -Tag, das in den HEAD des Dokuments eingebettet wird. Es ist vielleicht nicht das einzige Problem, das du hast, aber es ist definitiv ein Problem ... – mishac

Antwort

6

Nun, Sie können keine synchrone JSON-Anfrage haben. Die Art und Weise, wie jsonp implementiert wird, erfolgt über einen Script-Tag-Hack, um den domainübergreifenden Zugriff zu ermöglichen. Daher ignoriert $ .ajax einfach das async-Attribut, weil es keine synchrone jsonp-Anfrage erstellen kann.

Als eine Randnotiz sollten Sie versuchen & synchrone Ajax-Anfragen zu vermeiden. Obwohl sie auf den ersten Blick einfacher zu sein scheinen, werden sie im Falle einer Netzwerkretention eingefroren, was zu einer sehr unangenehmen Benutzererfahrung führt.

Verwandte Themen