2016-06-14 6 views
0

Ich arbeite an einer grundlegenden ASP.NET & AJAX/JSON-Zuordnung und ich bin frustriert mit der Arbeit. Eine der Anforderungen bestand darin, eine AJAX/JSON-Methode zu erstellen, um einige Manipulationen an SQL DB-Daten vorzunehmen.Warum schlägt die AJAX JSON-Antwort trotz 200 OK-Status fehl?

Um das zu vervollständigen, habe ich den folgenden Code:

Im aspx:

$.ajax({ 
       type: "GET", 
       dataType: "json", 
       url: "Retrieve",  
       success: function (data) { 
        alert(data); 
        var col; 
        for (col in data) { 
         alert(col); 
         addRow(data[col].id, data[col].Name, data[col].catagory, data[col].difficulty, data[col].company, data[col].price, '#products'); 
        } 
       }, 
       error: function() { 
        alert("1"); 

       } 

In "retrieve.aspx" Seite (der Teil des Codes, der die Daten für JSON erstellt):

Response.ContentType = "application/json; charset=utf-8"; 
      bool val1 = (System.Web.HttpContext.Current.User != null) && System.Web.HttpContext.Current.User.Identity.IsAuthenticated; 
      string category = Request.QueryString["category"]; 
      //string a = JsonConvert.SerializeObject(getProducts(category)); 
      var a = getProducts(category); 
      // instantiate a serializer 
      JavaScriptSerializer TheSerializer = new JavaScriptSerializer(); 

      var TheJson = TheSerializer.Serialize(a); 
      Response.Write(TheJson); 

Und last but not least, wenn ich versuche, den Datentyp zu ändern, es wird in Text, zeigen, dass der Inhalt der JSON-strukturierten Text zusammen mit einer HTML-Seite Code.

Was fehlt mir hier?

Antwort

1

Sie müssen sicherstellen, dass ASP.NET nichts anderes außerhalb des JSON-Inhalts darstellt, den Sie in die Antwort eingeben. Gehen Sie löschen, so die Antwort vorher:

Response.Clear(); 
Response.ContentType = "application/json; charset=utf-8"; 
... 

und am Ende vervollständigen die Antwort sofort:

Response.Write(TheJson); 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 

Siehe this excellent answer, warum CompleteRequest sollte hier statt weiter verbreitet Request.End() verwendet werden.

Die Verwendung von Seiten zur Ausgabe von JSON scheint jedoch ein Overhead zu sein. Vielleicht möchten Sie einfachere Möglichkeiten zum Ausführen der gleichen, die Http Handlers ist. Viele Beispiele über das Internet, hier ist one

+0

'Response.End' ist in der Regel eine schlechte Problemumgehung für ein Problem, das auf eine andere Art und Weise behoben werden kann. Die Anfrage wird beendet, indem intern ein Thread-Abbruch durchgeführt wird. Sogar [die Dokumentation] (https://msdn.microsoft.com/en-us/library/system.web.httpresponse.end (v = vs.110) .aspx) sagt: _ "Diese Methode wird nur aus Gründen der Kompatibilität bereitgestellt mit ASP "_ –

+1

@JamesThorpe, in der Tat, danke für das Aufzeigen. Erforschte ein wenig und lernte viel, aktualisierte Antwort mit einer besseren Option – Andrei

+0

Deshalb liebe ich SO - jeder kann lernen :) –

Verwandte Themen