Próbuję podłączyć skrypt do aplikacji Microsoft World-Wide Telescope. Ten ostatni nasłuchuje na porcie 5050 w poszukiwaniu poleceń. Działa na tym samym komputerze co przeglądarka (obecnie Chrome, ale o ile wiem, zachowanie jest takie samo w przypadku przeglądarek Firefox 7 i IE 9).
Wysyłam nagłówek „Access-Control-Allow-Origin: *” z oryginalnym plikiem html, aby spróbować wyeliminować ograniczenia XSS jako mój problem.
Mój kod dostępu do WWT jest następujący:
$.ajax({
type: 'POST',
url: url,
data: data,
crossDomain: true,
success: success,
dataType: dataType
});
url w tym przypadku to „http: //127.0.0.1: 5050 / layerApi.aspx? cmd = new & ...” (oczywiście… jest tutaj skrótem dla kilku dodatkowych parametrów).
Patrząc na diagnostykę sieci w Chrome, widzę to:
Request URL:http://127.0.0.1:5050/layerApi.aspx?cmd=new&...
Request Headersview source
Accept:application/xml, text/xml, */*; q=0.01
Content-Type:application/x-www-form-urlencoded
Origin:http://gwheeler4
Referer:http://gwheeler4/conceptconnect.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1
Żądanie wychodzi - widzę, że WWT tworzy nową warstwę. Jednak nie otrzymuję oddzwonienia. Jeśli dodam wywołanie zwrotne błędu, które jest wywoływane, ale właściwość błędu w obiekcie jqXHR to po prostu „błąd”, a stan wynosi 0. Jeśli spojrzę na żądanie sieciowe w Chrome, widzę „(anulowano)” jako stan i brak odpowiedzi .
Jeśli wezmę ten sam adres URL i wkleię go w nowej karcie przeglądarki, widzę, że odpowiedź to oczekiwany kod XML.
Oczywiście różnica polega na tym, że jest to GET, a nie POST, ale próbowałem tego w moim skrypcie i nie ma to znaczenia.
Jestem tym dość zaskoczony i byłbym wdzięczny za wszelkie świeże pomysły.
źródło
error
wywołanie zwrotne, aby sprawdzić, czy powraca z błędem?Odpowiedzi:
Jeśli ktokolwiek napotkał ten problem, problem polegał na tym, że wysyłaliśmy żądanie Ajax z łącza i nie uniemożliwialiśmy śledzenia tego łącza. Więc jeśli robisz to w
onclick
atrybucie, upewnij się, żereturn false;
również.źródło
return false
na końcu swojegoonsubmit
."return false;"
informuje formularze i linki, aby przerwać akcję. Było to pierwotnie przeznaczone do walidacji formularza javascript, gdzie funkcja walidacji zwróciłaby fałsz, jeśli formularz byłby nieprawidłowy, zatrzymując przesyłanie formularza.e.preventDefault();
, gdziee
jestonclick
parametrem zdarzenia.Jeśli używasz przeglądarki Chrome, w standardowym panelu sieci Chrome nie widać wystarczających informacji, aby określić podstawową przyczynę
(canceled)
żądania.Musisz użyć,
chrome://net-internals/#events
który pokaże ci krwawe szczegóły wysyłanego żądania - w tym ukryte przekierowania / informacje bezpieczeństwa dotyczące wysyłanych plików cookie itp.na przykład poniżej przedstawiono przekierowanie, którego nie widziałem w śledzeniu sieci - spowodowane tym, że moje pliki cookie nie były wysyłane między subdomenami:
t=1374052796448 [st= 1] +URL_REQUEST_START_JOB [dt=261] --> load_flags = 143540481 (DO_NOT_SAVE_COOKIES | DO_NOT_SEND_AUTH_DATA | DO_NOT_SEND_COOKIES | ENABLE_LOAD_TIMING | MAYBE_USER_GESTURE | REPORT_RAW_HEADERS | VALIDATE_CACHE | VERIFY_EV_CERT) --> method = "GET" --> priority = 2 --> url = "https://...." ... t=1374052796708 [st=261] HTTP_TRANSACTION_READ_RESPONSE_HEADERS --> HTTP/1.1 302 Moved Temporarily Content-Type: text/html Date: Wed, 17 Jul 2013 09:19:56 GMT ... t=1374052796709 [st=262] +URL_REQUEST_BLOCKED_ON_DELEGATE [dt=0] t=1374052796709 [st=262] CANCELLED t=1374052796709 [st=262] -URL_REQUEST_START_JOB --> net_error = -3 (ERR_ABORTED)
źródło
W moim przypadku miałem
type='submit'
tak, gdy wysyłałem formularz, strona była przeładowywana przed trafieniem Ajaxa, więc proste rozwiązanie było miećtype="button"
. Jeśli nie określisz typu, jest onsubmit
domyślny, więc musisz określićtype="button"
type='submit'
=>type='button'
LUB
Brak typu =>
type='button'
źródło
Miałem podobny problem. W moim przypadku próbuję użyć usługi WWW na serwerze Apache + django (usługa została napisana przeze mnie). Miałem taki sam wynik jak ty: Chrome twierdzi, że został anulowany, podczas gdy FF robi to dobrze. Gdybym próbował uzyskać dostęp do usługi bezpośrednio w przeglądarce zamiast Ajax, to również zadziałałoby. Rozglądając się po Google, odkryłem, że niektóre nowsze wersje Apache nie ustawiały poprawnie długości odpowiedzi w nagłówkach odpowiedzi, więc zrobiłem to ręcznie. Z django wszystko co musiałem zrobić to:
response['Content-Length'] = len(content)
Jeśli masz kontrolę nad usługą, do której próbujesz uzyskać dostęp, dowiedz się, jak zmodyfikować nagłówek odpowiedzi na używanej platformie, w przeciwnym razie będziesz musiał skontaktować się z usługodawcą, aby rozwiązać ten problem. Wygląda na to, że FF i wiele innych przeglądarek jest w stanie poprawnie obsłużyć tę sytuację, ale projektanci Chrome postanowili zrobić to zgodnie z opisem.
źródło
Miałem podobny problem. Korzystając z chrome: // net-internals / # events mogłem zobaczyć, że mój problem jest spowodowany cichym przekierowaniem. Moje żądanie get było uruchamiane w skrypcie onload. Adres URL miał postać „ http://example.com/inner-path ”, a 301 stale przekierowywał do „/ internal-path”. Aby rozwiązać problem, po prostu zmieniłem adres URL na „/ internal-path” i to rozwiązało problem. Nadal nie wiem, dlaczego skrypt, który działał tydzień temu, nagle dał mi problem ... Mam nadzieję, że to komuś pomoże
źródło
(Korzystanie z formularzy sieci Web ASP.NET)
Mój problem polegał na tym, że próbowałem zwolnić Ajax ze zdarzenia kliknięcia przycisku przesyłania, który miał konfigurację zdarzenia kliknięcia po stronie serwera. Musiałem uczynić przycisk tylko prostym przyciskiem (tj.
<input type="button">
)źródło
Miałem ten sam problem, dla mnie tworzyłem iframe na tymczasowy sposób i usuwałem iframe zanim Ajax się zakończy, więc przeglądarka anuluje moje żądanie Ajax.
źródło
Rozwijając odpowiedź @ Kazetsukai, możesz napotkać ten problem, jeśli wysyłasz żądanie AJAX od użytkownika klikającego łącze.
Jeśli skonfigurujesz swój link w ten sposób:
<a href="#" onclick="soAjax()">click me!</a>
A następnie program obsługi javascript, taki jak następujący:
Aby uniemożliwić przeglądarce skorzystanie z łącza i anulowanie wszelkich żądań w toku, należy dodać
return false
lube.preventDefault()
zatrzymać propagację zdarzenia kliknięcia:soAjax() { $.ajax({ ... etc ... }); return false; }
Lub:
źródło
Istnieją dwie możliwości, gdy żądanie AJAX zostaje odrzucone (jeśli nie jest to żądanie Cross-Origin):
Rozwiązanie dla 1) : Dodaj
return false;
lube.preventDefault();
w programie obsługi zdarzeń.Rozwiązanie dla 2) : Dodaj opcję limitu czasu podczas tworzenia żądania AJAX. Przykład poniżej.
$.ajax({ type: 'POST', url: url, timeout: 86400, data: data, success: success, dataType: dataType });
W przypadku żądań między źródłami sprawdź nagłówki HTTP udostępniania zasobów między źródłami (CORS).
źródło
Wystąpił ten błąd podczas wysyłania żądania przy użyciu protokołu http do adresu URL wymagającego protokołu https. Myślę, że wywołanie Ajax nie obsługuje przekierowania. Dzieje się tak nawet w przypadku opcji crossDomain ajax ustawionej na true (w JQuery 1.5.2).
źródło
W moim przypadku mod-rewrite I Apache pasował do adresu URL i przekierowywał żądanie do https.
Spójrz na żądanie w chrome: // net-internals / # events.
Pokaże wewnętrzny dziennik żądania. Sprawdź przekierowania.
źródło
Miałem ten sam problem, ale w moim przypadku okazał się to problem z ciasteczkami. Faceci pracujący na zapleczu zmienili ścieżkę do pliku cookie JSESSIONID, który jest ustawiany, gdy logujemy się do naszej aplikacji, i miałem na komputerze stary plik cookie o tej nazwie, ale ze starą ścieżką. Kiedy więc próbowałem zalogować się w przeglądarce (Chrome), wysłałem do serwera dwa ciasteczka o nazwie JSESSIONID, o różnych wartościach - co zrozumiałe go pomieszało - więc anulował żądanie. Usunięcie plików cookie z mojego komputera naprawiło to.
źródło
Miałem ten błąd w bardziej upiorny sposób: karta sieci i zdarzenia chrome: // net-internals / # nie wyświetlały żądania po ukończeniu js. Podczas wstrzymywania js w wywołaniu błędu karta sieci wyświetlała żądanie jako (anulowane). Konsekwentnie wywoływano dokładnie jedno (zawsze takie samo) z kilku podobnych żądań na stronie internetowej. Po ponownym uruchomieniu Chrome błąd już się nie pojawił!
źródło
Miałem anulowane w przeglądarce Firefox . Niektóre wywołania Ajaxa działały doskonale dla mnie, ale zawiodły u współpracownika, który musiał go używać.
Kiedy sprawdziłem to za pomocą wspomnianych powyżej sztuczek Chrome, nie znalazłem nic podejrzanego. Podczas sprawdzania tego w firebugu pokazywał animację „ładowania” po dwóch metalicznych wywołaniach i bez zakładki wyników.
Rozwiązanie było mega proste: przejdź do historii, znajdź stronę, kliknij prawym przyciskiem -> zapomnij stronę.
Zapomnij, nie usuwaj.
Potem już żadnych problemów. Domyślam się, że ma to coś wspólnego z .htaccess.
źródło
W moim przypadku był to brakujący końcowy ukośnik w adresie URL. Dodanie końcowego ukośnika rozwiązało mój problem.
źródło
W przypadku Dropzone.js. W moim przypadku było to spowodowane tym, że wartość
timeout
opcji była domyślnie zbyt niska. Więc zwiększ go według swoich potrzeb.{ // other dropzone options timeout: 60000 * 10, // 10 minutes ... }
źródło
Miałem ten problem z określoną siecią 3G.
Zawsze kończyło się niepowodzeniem w przypadku żądań DELETE
net_error = -101
w chrome: // net-internals / # events.Inne sieci działały dobrze, więc zakładam, że był uszkodzony serwer proxy lub coś takiego.
źródło