2009-08-19 14 views
0

Ich habe einige Code auf dem Client, der einen Aschx-Handler mit $ .ajax() aufruft und Json Daten vom Server erwartet. Alles funktioniert gut auf FF, IE 6,7,8, wenn ich die Anwendung auf einem lokalen Webserver ausführen. Wenn ich die Anwendung jedoch auf einem fernen Testserver bereitstellen, funktionieren IEs nicht mehr ($ .ajax gibt einen parserfehler zurück), während FF weiterhin wie erwartet funktioniert.jQuery Ajax funktioniert nicht remote auf IE

Mein erster Gedanke war, dass mein JSON-Objekt ein Testkomma haben muss, was IEs hassen, aber das war nicht das Problem, da es keine Testkommas gab. Dann habe ich versucht, verschiedene Dinge wie die Inhaltstypen von app/json zu tex/plain zu ändern, immer noch den gleichen Fehler.

Etwas, das ich seltsam fand ist, dass, wenn ich Fiddler fire, dann IEs remote arbeiten, sonst bekomme ich den Parserfehler.

Hat jemand so etwas schon mal erlebt? Vielen Dank.

$.ajax({ 
     type: "GET", 
     url: "handlers/GetAsyncResults.ashx", 
     contentType: "application/json; charset=utf-8", 
     data: {'from': dateFrom, 'to': dateTo, 'accountId' : aId, 'page': currentPage, 'sortField' : sortField, 'sortDirection' : sortDirection}, 
     dataType: "json", 
     success: function(data) { GetAsyncResultsEnd(data); }, 
     error: function(x, y, z) { GetAsyncResultsErrorHandler(x, y, z); } 
    }); 

BEARBEITEN: Code-Snippet hinzugefügt.

+0

Können Sie einen Ausschnitt des Client-Codes einfügen? – ChaosPandion

+0

Versuchen Sie, r = 9028374 (irgendeine zufällige Zeichenfolge) anzuhängen, um zu bestätigen, dass es nicht zwischengespeichert wird. –

+0

Befindet sich der Aschx-Handler auf demselben Server wie das Dokument, das ihn aufruft? –

Antwort

0

Das einzige, was mir einen Parse-Fehler gegeben hat, bevor es JSON ungültig. Sie haben gesagt, dass Sie nach Leerzeichen gesucht haben, aber versuchen Sie, Ihren Json durch zu laufen - JSON Lint. Das hat für mich gut funktioniert. Es ist interessant, dass der Geiger hilft.

+0

Gerade versucht Json Lint, meine jsons sind laut der Website gültig. Vielen Dank. –

+0

Zwei Dinge - können Sie ein Beispiel Ihrer JSON-Antwort posten? Und ich habe den JSON-Typ von JQuery nicht verwendet. Ich nahm den Text immer und lief ihn durch Crockfords JSON.parse. Es wäre interessant zu sehen, ob das Problem bei der Verwendung dieser Methode weiterhin besteht - aber vielleicht verwendet JQuery seinen JSON-Parser. – Brian

0

Versuchen Sie es mit

contentType: 'application/json', 
+0

Versucht, dass immer noch der gleiche Fehler in IE. Vielen Dank. –

1

Es sortiert. Vielen Dank.

Auf der Serverseite, nachdem wir context.Response.Write ('Unsere json Daten') genannt, nennen wir dann context.Response.Flush() und context.Response.Close(). Nachdem wir die .Flush() und .Close() entfernt hatten, fing alles wieder an zu arbeiten. Aber ich kann immer noch nicht erklären, warum es für Firefox und nicht IE funktioniert, noch wie Fiddler es magisch für IE funktioniert.

Vielen Dank.

0

Haben Sie versucht einfach den Datentyp zu entfernen: „json“

ich das gleiche Problem hatte und Entfernen, dass es behoben. Durch das Entfernen kann jQuery "entweder responseXML oder responseText intelligent an Ihren Erfolgsrückruf übergeben".

0

In meiner ashx.cs-Methode musste ich die Flush() auskommentieren, damit dies funktioniert.

Zuvor war mein JSON wohlgeformt, und alles schien zu funktionieren, aber der JavaScript (JQuery .ajax POST-Aufruf) würde nur nichts zurückgeben, FireBug würde keinen Fehler melden, die Konsole meldete keinen Fehler , nichts. Es funktionierte alles lokal (in Visual Studio), aber nicht, wenn alles auf dem Server war.

//code from the ashx.cs file... 
//...after populating the response, resp: 

JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); 
String json = jsonSerializer.Serialize(resp); 

r.Write(json); 
//r.Flush(); /////commented out! It returns to the .js file correctly! 
....