2009-09-30 13 views
5

Jesteśmy w trakcie opracowywania aplikacji internetowej na iPhone'a przy użyciu rozległych wywołań jonowych AJAX w celu wyodrębnienia danych z usługi sieciowej XML. Podczas programowania i testowania na komputerze Mac w przeglądarce Safari połączenia działają znakomicie. Problem polega na tym, że zaraz po przetestowaniu emulatora iPhone'a lub rzeczywistego urządzenia nie otrzymujemy niczego z usługi sieciowej.Żądanie Ajax JQuery nie działa w przeglądarce urządzenia iPhone'a

Włączyłem menu "Opracowanie" i zmieniłem "Agenta użytkownika" na Mobile Safari, aby sprawdzić, czy to ma znaczenie, ale nadal działa po stronie komputera.

Nie sądzę, że jest to ograniczenie na stronie, ponieważ wszystkie wywołania ajax itp. Są wykonane z tego samego numeru serwera i portu.

Czy istnieje sposób, w jaki możemy przeprowadzić debugowanie javascript na emulatorze, aby sprawdzić, gdzie zawodzi połączenie?

Dzięki Devan

Odpowiedz

4

Można włączyć javascript konsolę w Mobile Safari. Zobacz instrukcje: here. Zasadniczo jest to Ustawienia-> Safari-> Deweloper-> Debug Console. Działa to na emulatorze i na rzeczywistym urządzeniu.

+0

link jest uszkodzony :( – Pathros

5

Wpadłem na ten sam problem.

Sprawdź parametr url: w obiekcie, który wysyłasz, do funkcji jQuery.ajax. Skróć go z "http://the/full/url" do "/ just/the/relative/to/root/part"

Dla mnie wygląda jak bug Safari Mobile.

+0

Dzięki za cynk. - faktycznie cmokaliśmy strumienia XML z innego serwera/domeny niż miejsce gospodarzem javascript jestem przy założeniu, że jest to środek bezpieczeństwa XSS, że iPhone nie zezwala na XMLHttpRequest z serwera innej firmy? – Devan

+0

To również mi działało – Rob3C

+0

Ta odpowiedź rozwiązała problem, wiele lat później uruchomiłem Safari na iPhone'ie 7. – iep

0

OK, myślę, że to rozwiązaliśmy, chociaż wciąż mnie to dziwi.

Jeśli zrobimy "dummy" XMLHttpRequest bezpośrednio po sekcji onReady() w naszym kodzie, to wydaje się, że "odblokowuje" wszelkie następne żądania.

http = new XMLHttpRequest(); 

http.open("GET", "/getdata/dummy.xml); 
http.onreadystatechange=function() { 
    if(http.readyState == 4) { 
     // alert(http.responseText); 
    } 
} 
http.send(null); 

Jeśli skomentuję ten blok kodu, to następujące doskonałe żądania XML zawiodą. Ponownie jest to tylko na urządzeniu, ponieważ Safari i emulator będą działały bez tego bloku kodu w miejscu.

PS: dummy.xml zwraca po prostu „nic”

0

Odpowiedź dla mnie było przesunięcie znacznika script w tagu głowy.

0

Miałem ten sam problem podczas pisania czatu AJAX dla strony internetowej. Problemem jest pamięć podręczna. Dodaj tę linię kodu, a problem zostanie rozwiązany.

$.ajaxSetup({ cache: false }); 
Powiązane problemy