2013-08-14 6 views
12

Zadzwonię do funkcji getResult() za każdym razem, gdy res.reply = 2, ale są przypadki, że res jest pusty. Gdy zwrócona wartość jest pusta, wywoływane jest console.log("error"). Działa to w starszych wersjach jQuery Mobile. Teraz wersja jest 1.3.2.jQuery wywołanie ajax zwraca pusty błąd, jeśli zawartość jest pusta

function getResult() 
{ 
    request = $.ajax({ 
     type: "POST", 
     url: url, 
     dataType: "json", 
     data: { 
      .... 
     }, 
     error: function() {   
      console.log("error"); 
     }, 
     success: function(res) { 
      if(res.reply=='2') { 
       getResult(); 
      }   
     } 
    }); 
} 
+1

Oczekiwanie pomocy z jQuery 1.3.2 jest trochę ... * optymistyczne *. Dlaczego nie używasz aktualnej wersji? – lonesomeday

+0

Uderzenie obsługi "błędu" niekoniecznie oznacza, że ​​odpowiedź jest pusta - najczęściej oznacza to, że nie można odzyskać odpowiedzi z powodu błędu na serwerze. Sprawdź ruch sieciowy w Firebug i dziennikach serwera w poszukiwaniu błędu. –

+1

Jakiego błędu otrzymujesz .. możesz sprawdzić za pomocą 'error: function (xhr, err) { console.log (xhr); console.log (err); } ' – Pranav

Odpowiedz

23
dataType: "json" 

oznacza: dać mi json, nic innego. pusty ciąg nie jest JSON, więc już otrzymywać pusty ciąg znaków oznacza, że ​​nie był sukces ...

request = $.ajax({ 
    type: "POST", 
    url: url, 
    data: { 
     .... 
    }, 
    error: function() {   
     console.log("error"); 
    }, 
    success: function(res) { 
     var response = jQuery.parseJSON(res); 
     if(typeof response == 'object'){ 
      if(response.reply == '2') { 
       getResult(); 
      } 
     } else { 
       //response is empty 
     } 
    } 
}); 
0

Wygląda normalnie robisz chcą odpowiedź JSON, więc nie byłoby zmienić typ danych na " text ", zamiast tego kazałbym serwerowi zwrócić poprawną odpowiedź JSON, nawet gdy odpowiedź jest pusta, np "{}" zamiast "".