Pourquoi jQuery insiste-t-il sur le fait que mon texte brut n’est pas «bien formé»?

Je passe un appel AJAX pour récupérer du texte brut:

$.ajax({ url: "programData.txt", type: "GET", dataType: "text", cache: false, success: processData }); 

Quand je fais la demande, cependant, j’obtiens l’erreur suivante:

Erreur: fichier source mal formé: fichier: ///projects/foo/programData.txt? _ = 1259694590361 Ligne: 1, Colonne: 2

Pourquoi jQuery essaie-t-il de traiter mon texte brut et comment puis-je le faire arrêter?

Chargez-vous la page de votre navigateur via HTTP ou ouvrez-vous simplement celle-ci dans un fichier normal? Est-ce que l’adresse de la page qui exécute le javascript commence par http: ou file:? Je suppose que c’est le dernier cas, et les appels Ajax fonctionnent différemment dans cette situation (voir la réponse de tvanfonsson ci-dessous). Si vous créez une application Web qui sera servie ultérieurement via HTTP, essayez d’exécuter votre page à l’aide d’un serveur HTTP local.

Firefox tente d’parsingr le fichier au format HTML avant même de le restituer à jQuery.

Il y a plusieurs raisons pour lesquelles il pourrait essayer de faire cela. Si, comme Jaanus l’a suggéré, vous utilisez une URL file: // ou chrome: //, elle n’a pas de type MIME et utilise le code HTML. Ou votre serveur HTTP peut renvoyer le type MIME incorrect.

À compter de jQuery 1.5.1, une option mimeType permet de remplacer le type MIME renvoyé par Firefox. Donc, vous pouvez faire ce qui suit:

 $.ajax({ mimeType: 'text/plain; charset=x-user-defined', url: "programData.txt", type: "GET", dataType: "text", cache: false, success: processData }); 

L’option Doc sur mimeType se trouve à http://api.jquery.com/jQuery.ajax/

Et voici un aperçu de ce qui se passe au niveau de Firefox: https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Receiving_binary_data

Vous obtenez des codes de réponse différents lors de l’ouverture d’un fichier local via XMLHttpRequest par rapport à l’utilisation d’une requête HTTP. Je suppose que puisque vous ouvrez un fichier local, jQuery étouffe le code de réponse, pensant que c’est une erreur car ce n’est pas 200 OK .

Référence

Exemple: demande synchrone non HTTP

Malgré son nom, XMLHttpRequest peut être utilisé pour des requêtes non HTTP. Cet exemple montre comment l’utiliser pour extraire un fichier du système de fichiers local.

 var req = new XMLHttpRequest(); req.open('GET', 'file:///home/user/file.json', false); req.send(null); if(req.status == 0) dump(req.responseText); 

L’essentiel à noter ici est que l’état du résultat est comparé à 0 pour réussir au lieu de 200. En effet, les schémas de fichiers et ftp n’utilisent pas les codes de résultat HTTP.

Les types supportés sont:

 * "xml": Treat the response as an XML document that can be processed via jQuery. * "html": Treat the response as HTML (plain text); included script tags are evaluated. * "script": Evaluates the response as JavaScript and evaluates it. * "json": Evaluates the response as JSON and sends a JavaScript Object to the success callback. 

Peut-être que use devrait utiliser “html” au lieu de “text” car jQuery ne semble rien parsingr si vous spécifiez html comme type.

jQuery ne semble pas avoir ce problème sur chrome et ie8.