2012-06-07 14 views
5

Mam następujący:W jaki sposób można uzyskać informacje na powrót z wywołania AJAX, gdy łączność z internetem jest stracone

$.ajax({ cache: false, 
    url: "/Admin/Contents/GetData", 
    data: { accountID: AccountID }, 
    success: function (data) { 
     $('#CityID').html(data); 
    }, 
    error: function (ajaxContext) { 
     alert(ajaxContext.responseText) 
    } 
}); 

Kiedy stracić łączność z internetem błąd nazywa, ale nie widzę nic w responseText.

Czy istnieje sposób, w jaki mogę dowiedzieć się różnego rodzaju błędów na podstawie informacji o stanie w zwracanych ajaxContent? Naprawdę chciałbym móc napisać komunikat "utrata połączenia z Internetem" i inną wiadomość, jeśli jest jakiś inny problem.

Odpowiedz

1

Zaktualizowano.

Powinieneś po prostu dodać: timeout:, gdzieś w $ .ajax ({}). Również pamięć podręczna: false może pomóc w kilku scenariuszach.

$ .ajax jest dobrze udokumentowany, powinieneś sprawdzić opcje tam, może znaleźć coś pożytecznego.

JQuery Ajax - How to Detect Network Connection error when making Ajax call

+0

ja się nie zgadzam, ponieważ stan jest odpowiedź HTTP odebranych z serwera ** **, więc uzyskanie jednego (czy to 404 lub jakikolwiek inny) byłby dowodem, że łączność z siecią jest w porządku. –

+0

Myślę, że masz rację. Zaktualizowałem moją odpowiedź. –

1
$.ajax({ cache: false, 
    url: "/Admin/Contents/GetData", 
    data: { accountID: AccountID }, 
    success: function (data) { 
     $('#CityID').html(data); 
    }, 
    error: function (ajaxContext) { 
     if(ajaxContext.status=="404") 
     { 
      //write your not found handler code here 
     } 
     else 
     alert(ajaxContext.status) 
    } 
}); 
+0

Widzę, że niektórzy ludzie mówią, że są trzy parametry. Jednak jeśli używam ajaxContext, czy nadal mogę uzyskać dostęp do wszystkich trzech? – Alan2

+0

Tak, nadal możesz używać. Dlaczego warto ich użyć – Rab

+0

Próbuję zrozumieć, jeśli te trzy są różne dla jqXHDR, textStatus i errorThrown. – Alan2

2

Według jQuery docu funkcja błędu otrzymuje trzy argumenty:

  1. jqXHR:
  2. textStatus: ciąg opisujący rodzaj błędu, który wystąpił
  3. errorThrown: opcjonalny obiekt wyjątku, jeśli wystąpił

Ponadto stwierdza:

Możliwe wartości dla drugiego argumentu (oprócz null) są "timeout", "błąd", "przerwać" i "parsererror". Gdy wystąpi błąd HTTP, ErrorThrown otrzymuje tekstową część statusu HTTP, na przykład "Nie znaleziono" lub "Wewnętrzny błąd serwera".

Możesz więc rzucić okiem na treść drugiego i trzeciego parametru.

+0

Czy potrzebuję wszystkich trzech parametrów? Wygląda na to, że są one również wysyłane w poprzek, jeśli po prostu użytkownika ajaxContext. W tym otrzymuję ajaxContext.readyState, ajaxContext.Status i ajaxContext.StatusText – Alan2

+0

@Gemma W JS nie trzeba przechwytywać wszystkich argumentów funkcji. Ważna jest tylko kolejność argumentów.Jeśli więc podasz dwa parametry w nagłówku funkcji, tylko te zostaną wypełnione, a trzeci zostanie usunięty. (Są jednak sposoby, aby uzyskać dostęp do wszystkich argumentów funkcji niezależnie od tego, ile ich zdefiniowano, ale nie są one tutaj potrzebne). – Sirko

+0

@Sirko ma prawie rację: spójrz na drugi argument. Jeśli null, ty ** możesz ** powiedzieć na pewno ** nie było problemu z połączeniem sieci **, a trzecim argumentem jest status HTTP wysłany przez serwer. Jeśli nie jest null, nie sądzę, że będziesz w stanie powiedzieć na pewno: "timeout" i "error" są ** tropami dla łączności sieciowej w dół **, ale nie są ostatecznym dowodem (może to być opóźnienie sieci lub nawet opóźnienie serwera). "parsererror" jest kluczem do otrzymania jakiejś odpowiedzi, a zatem raczej działającej sieci. Ale odpowiedź mogła zostać uszkodzona również z powodu problemów z siecią ... A "przerwać" może być spowodowane przez użytkownika. Albo nie. –

Powiązane problemy