2010-11-23 5 views
3

Der folgende Code funktioniert gut, aber das einzige Problem ist nicht geben Sie mir die textStatus. Was muss ich tun, um textStatus zu bekommen?Status der Anfrage Rückruf 'TextStatus'

var url = "http://host/MyServiceImpl.svc/GetCount?method=?"; 
     $.ajax({ 
      dataType: 'jsonp', 
      data: { Id: '1' }, 
      jsonp: 'jsonp_callback', 
      url: url, 
      success: function (json, textStatus) { 
       alert(json.d); 
       alert(textStatus); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       debugger 
      } 
     }); 

oder

$.getJSON(url, { Id: '1'}, 
    function (data, textStatus) { 
     alert(textStatus); 
}); 
+0

Es wird nicht viel zum Debuggen angeboten, aber das [jquery.jsonp plug-in] (http://code.google.com/p/jquery-jsonp/) bietet 'textStatus' (" error "/ "Erfolg") auf Erfolg, Fehler und abgeschlossen für Jsonp Anrufe: [Verwandte SO Frage] (http://StackOverflow.com/Questions/1002367/Jquery-Ajax-Jsonp-ignores-a-Timeout-and-doesnt-fire -the-error-Ereignis). Hinweis: 'textStatus' ist der zweite Parameter für die meisten dieser Handler-Funktionen. – patridge

Antwort

1

JSONP funktioniert durch einen Tag zu Ihrem Dokument mit der Ziel-URL als Quelle zu schreiben. Der Server wickelt sie dann in einem Funktionsaufruf um.

somecallback(your data) 

Der Nachteil dabei ist, dass XMLHttpRequest nicht verwendet wird, und daher ist keine „echte“ Errordetection für JSONP. Also im Grunde wird es nicht funktionieren, weil JsonP ein Hack an sich ist.

Das besagt, dass es eine einfache Problemumgehung gibt, die die meisten Fälle abdeckt, in denen Sie einen Fehler signalisieren müssen. Lassen Sie den zurückgegebenen JSON eine .Success -Eigenschaft und möglicherweise eine .ErrorMessage. Normalerweise verwende ich eine Aufgabe dieser Struktur:

{ Success: true|false, ErrorMessage: "", Data:json} 

ofcourse 404 oder die 500 sind immer noch ein Problem verursachen, aber der Schlüssel ist, zu versuchen, diese zu vermeiden, wenn JSONP dienen.

+0

Kannst du mir bitte zeigen, wo genau du den obigen Code hast? –

+0

Ich habe die obige Lösung nicht implementiert, sondern nur zum Schließen geschlossen. –

Verwandte Themen