2009-08-19 13 views
0

J'ai du code sur le client qui appelle un gestionnaire ashx en utilisant $ .ajax() et attend des données json du serveur. Tout fonctionne bien sur FF, IE 6,7,8 lorsque je lance l'application sur un serveur web local. Toutefois, lorsque je déploie l'application sur un serveur de test distant, les IE ont cessé de fonctionner ($ .ajax renvoie un parsererreur), tandis que FF continue de fonctionner comme prévu. Ma première pensée était que mon objet json doit avoir une virgule d'essai que les IE détestent, mais ce n'était pas le problème car il n'y avait pas de virgules d'essai. Ensuite, j'ai essayé de changer diverses choses comme les types de contenu d'app/json à tex/plain, toujours la même erreur. Quelque chose que je trouve étrange est que si je lance un violoneur, alors IE fonctionnera à distance, sinon, je reçois le parsererreur.jQuery ajax ne fonctionne pas à distance sur IE

Est-ce que quelqu'un a déjà vécu quelque chose comme ça? Merci.

$.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); } 
    }); 

EDIT: extrait de code ajouté.

+0

Pouvez-vous déposer un extrait du code client? – ChaosPandion

+0

Essayez d'ajouter? R = 9028374 (une chaîne aléatoire) juste pour confirmer que ce n'est pas la mise en cache. –

+0

Le gestionnaire ashx est-il sur le même serveur que le document qui l'appelle? –

Répondre

0

La seule chose qui m'a donné une erreur d'analyse avant JSON invalide. Vous avez dit que vous avez vérifié les espaces de fin, mais essayez d'exécuter votre json à travers - JSON Lint. Cela a bien fonctionné pour moi. Il est intéressant que Fiddler aide.

+0

Juste essayé Json Lint, mes jsons sont valables selon le site. Merci. –

+0

Deux choses - pouvez-vous poster un exemple de votre réponse JSON? Et je n'ai pas utilisé le type json de JQuery. J'ai toujours pris le texte et l'ai fait passer par Crockfords JSON.parse. Il serait intéressant de voir si le problème persiste en utilisant cette méthode - mais peut-être que JQuery utilise son analyseur JSON. – Brian

0

Essayez d'utiliser

contentType: 'application/json', 
+0

Essayé que, toujours la même erreur dans IE. Merci. –

1

Il est trié. Merci.

Sur la fin du serveur, après que nous avons appelé context.Response.Write ('Nos données JSON'), nous appelons alors context.Response.Flush() et context.Response.Close(). Après avoir supprimé les fichiers .Flush() et .Close(), tout a recommencé à fonctionner. Mais je ne peux toujours pas expliquer pourquoi cela fonctionne pour Firefox et non IE, ni comment magicien fait magiquement cela fonctionne pour IE.

Merci.

0

Avez-vous essayé de supprimer simplement le type de données: « JSON »

J'ai eu ce même problème et le retrait qui le fixe. Supprimer cela permet à jQuery de "passer intelligemment soit responseXML soit responseText à votre callback réussi".

0

Dans ma méthode ashx.cs, j'ai dû commenter Flush() pour que cela fonctionne. Avant cela, mon json était bien formé, et tout semblait fonctionner, mais l'appel JavaScript (JQuery .ajax POST) ne renvoyait rien, FireBug ne signalait pas d'erreur, la console ne signalait pas d'erreur , rien. Tout a fonctionné localement (dans Visual Studio), mais pas quand tout était sur le serveur.

//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! 
.... 
Questions connexes