2011-06-29 13 views
9

Próbuję rozwiązać ten problem przez wiele godzin (również tutaj szukane, ale żadne z rozwiązań nie działa), więc nie miałem innego wyjścia, jak tylko mieć nadzieję, że ktoś mi powie, dlaczego to jest dzieje się i jak mogę to naprawić.Żądania getJSON lub AJAX nie działają z IE9

Jest to prosty kod, który działa z Firefoksem, ale nie z IE9 (nie mają inne wersje)

Przykładowy kod jest tutaj:

http://jsfiddle.net/z5b2J/

Źródło jest to jedno:

$.ajax({ 
    url: "http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400", 
    success: function(){ 
    alert('hi'); 
    } 
}); 

Strona nie musi być prawdziwa do celów testowych.

Jak widać w skrzypcach pod Firefoxem, pojawia się okienko alarmowe z napisem "cześć", ALE jeśli uruchomisz ten sam kod w IE9, alarm nie pojawi się.

Ta sama sytuacja występuje w metodzie getJSON, jest to problem dla mnie, ponieważ chcę uruchomić jakiś kod zamiast alertu, ale nie będzie on działał w IE9.

Odpowiedz

13

Czy próbowałeś użyć getJSON() zamiast ajax? Jest to żądanie między domenami, a Ty pobierasz json, aby prawdopodobnie był to problem.

To działa w obu przeglądarkach teraz:

$.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400&callback=?",function(){ 
    alert('hi'); 
}); 
+0

"Ta sama sytuacja występuje w metodzie getJSON" Tak, spróbowałem. – MikeJ

+0

wypróbuj powyższe. to skrzypce działa dla mnie: http://jsfiddle.net/z5b2J/7/ –

+8

(pamiętaj, że musisz dodać argument "& callback =?" do adresu URL ... jest to jeden ze sposobów, lub możesz określić "jsonp" jako typ w wywołaniu $ ajax –

4

Korzystanie $.getJSON lub $.ajax należy również określić dataType parametr 'jsonp'

tu przykład przy użyciu getJSON:

var webpage = ".... your very long url ...."; 
var anchor = document.createElement('a'); 
anchor.href = webpage; 
// handle the multiple parameters 
anchor.search += ((anchor.search.length > 0) ? "&" : "?"); 
anchor.search += "callback=?"; 

$.getJSON(anchor.href, 'jsonp', function(data, textStatus, jqXHR){ 
    alert('hi'); 
}); 
+2

To tylko jeśli faktycznie używasz jsonp. – nikolasleblanc

6

Problem IE9 zależy od zaawansowanego zarządzania pamięcią podręczną.

Jeśli opróżnisz pamięć podręczną przeglądarki IE i ponownie uruchomisz żądanie ajax: po raz pierwszy zadziała.

Aby rozwiązać ten problem, należy wysłać odpowiedź HTTP z "noStore = true" i "Duration = 0" lub równoważną.

Oto example in MVC.

2

I rozwiązać problem poprzez dodanie "Duration = 0" z url

2

Jeśli dodać zwrotnego =? do adresu URL zostanie przekształcony w coś takiego jak callback = jQuery1820719005049791166_1366033695001. Jest to nazwa funkcji i po stronie serwera powinieneś owinąć swój zakodowany obiekt json w tym wywołaniu funkcji. Więc twoje ciało odpowiedzi powinno być nie tylko {ok: true}, ale jQuery1820719005049791166_1366033695001 ({ok: true}); . To zadziałało dla mnie!