jQuery post provoque Uncaught SyntaxError: Unexpected token :
J'ai trouvé un tas de questions similaires ici, mais après 3 heures de lecture et d'essayer des trucs, je suis de poster mon propre. Je m'excuse pour le double, mais je ne sais pas ce qui se passe ici.
Donc, j'ai cette fonction javascript:
function saveSetting(settingName, settingValue) {
$.post(
appUrl + "Account/SaveSetting",
{ settingName: settingName, settingValue: settingValue },
function (data) {
alert(data.Result);
},
"json"
);
}
qui je l'appelle comme ceci:
saveSetting("bookFontSize", fontSize);
où fontSize est "10.5" ou quelque chose de similaire.
Chrome rapports de l'après-têtes comme ceci:
Request URL:http://localhost:1227/Account/SaveSetting?callback=jQuery151022712289774790406_1298625531801
Request Method:POST
Status Code:200 OK
Request Headers
Accept:text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:42
Content-Type:application/x-www-form-urlencoded
Cookie:ASP.NET_SessionId=jwpzp4okerckuh2bhkl2pnwu; .ASPXAUTH=429EEA1CFBFD9D5702011C59F77F18F8DAEEEB412314D608E86289779DF8ED9C80C6E0370B7108D68C44B088C7CB6998F34C59DDCFF8EA9D4A556495F5D40DF21737392DCF5942F73726882BEC354C35599864F751751FD458473FA4541AF25294F7E16DC00AABD4DEC43B321B0ECCBF195FD419C3BC912017275FC478A27F0C12A28D124A663EA5F19E5AEFFB276603
Host:localhost:1227
Origin:http://localhost:1227
Referer:http://localhost:1227/Read/116/1
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
X-Requested-With:XMLHttpRequest
Query String Parameters
callback:jQuery151022712289774790406_1298625531801
Form Data
settingName:bookFontSize
settingValue:10.5
Response Headers
Cache-Control:private, s-maxage=0
Connection:Close
Content-Length:38
Content-Type:application/json; charset=utf-8
Date:Fri, 25 Feb 2011 09:18:53 GMT
Server:ASP.NET Development Server/10.0.0.0
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0
Qui passe pour un C# /ASP.NET MVC3 action qui ressemble à ceci:
[Authorize]
public JsonResult SaveSetting(string settingName, string settingValue)
{
try
{
repository.SaveSettingForUser(CurrentUser, settingName, settingValue);
}
catch (Exception ex)
{
return Json(new { Result = CurrentUser.IsAdmin() ? "Failed :" + ex.Message : "Failed" });
}
return Json(new { Result = string.Format("Set {0} to {1}.", settingName, settingValue) });
}
qui, selon google chrome, revient à ceci:
{"Result":"Set bookFontSize to 10.5."}
qui ressemble à de la légitime json pour moi. Cependant, j'ai cette erreur dans google chrome:
Uncaught SyntaxError: Unexpected token :
et ce dans IE 7, et 8:
An error has occurred in the script on this page.
Line: 67456553
Char: 10
Error: Expected ';'
Code: 0
URL: http://localhost:1227/Read/116/1
Je certainement ne pas avoir de 67 millions de lignes de code 🙂
De toute façon, personne ne sait ce que le diable se passe ici? Mon alerte ne fonctionne pas. IE jamais fait la demande, mais Chrome ne.
Je pense que cette fonction a effectivement travaillé avec une précédente version de jQuery il y a longtemps, avec la mise en $.ajaxSettings.traditional = true
, mais maintenant elle ne fonctionne pas (jQuery 1.5.1) avec ou sans réglage.
Mise à jour: je l'ai eu à travailler. Je traversai le javascript avec le débogueur. Pour une raison quelconque, au cours de l' .ajax() de jQuery, c'était d'entrer dans jquery.validate.js. Pourquoi serait-il le faire? J'ai eu le fichier inclus, mais n'était pas l'utiliser n'importe où. J'ai éliminé l'erreur par tout simplement de ne plus référencer jquery.validate.js. Mais ce genre de suce, parce que si je veux utiliser les fonctionnalités de validation dans l'avenir?
Donc ma question maintenant est: "Pourquoi le fait d'avoir jquery.validate.js dans mon projet vis de tout cela?"
Mise à jour 2: Il y a un bug dans jquery.validate.js qui a été fixé dans une fourchette de projet sur github. Voir ma réponse pour plus de détails. Je n'étais même pas à l'aide de les fonctions de validation de ce fichier, simplement l'inclure dans la page pour l'utiliser plus tard. C'est dans la manière et les sauts de choses. Note de l'auteur de jquery.validate.js concernant la correction: "Correctifs de jQuery 1.5 - code à l'aide de jQuery.ajaxSettings et pas de fenêtre.ajaxSettings (oui, oui, c'est stupide)."
OriginalL'auteur Chris | 2011-02-25
Vous devez vous connecter pour publier un commentaire.
J'ai tout compris!!!
C'est un bug dans jquery.validate.js. Il est répétée et documentée ici: http://bugs.jquery.com/ticket/8064
L'auteur a abordé la question, le 2 février 2011, mais cette correction n'a pas encore fait il dans un communiqué officiel du plugin (en date du 25 février 2011 et jQuery Valider 1.7). Si vous souhaitez jQuery 1.5+ JSON de travail en utilisant jquery de validation, vous devez télécharger le corrigé de validation plugin.
https://github.com/jaubourg/jquery-validation/raw/master/jquery.validate.js
https://github.com/jaubourg/jquery-validation/raw/master/jquery.validate.min.js
Si vous êtes ici, à partir de google et les liens ci-dessus ne fonctionnent plus, la mise à niveau vers une version de valider que c'est plus de 1,7 fonctionnera probablement. Sinon, rendez-vous ici https://github.com/jaubourg/jquery-validation et de prendre la dernière version du référentiel.
2011-08-31 mise à Jour: On dirait qu'ils n'utilisent pas que GitHub lien plus. J' pense c'est ce que vous avez besoin.
OriginalL'auteur Chris
Que vous avez déclarée à la poste en tant que json, de sorte que le résultat doit être auto évaluation.
Néanmoins, essayez d'évaluer le résultat avant de l'alerte à l'intérieur, sur les supports de l'alerte
OriginalL'auteur profanis
Pourrait-il que la clé de l'objet noms sont créés dynamiquement dans certains navigateurs? Essayez de changer saveSetting à la suivante:
Ou peut-être en modifiant le nom d'argument pour autre chose que de l'objet nom de la clé:
OriginalL'auteur Adolph Trudeau
Vous êtes de retour incorrect JSON à partir du serveur. Votre retour JSON a un certain caractère de contrôle dans le
Result
. Recommande l'envoi d'une chaîne sansnew String.format
OriginalL'auteur Gutzofter
Jamais coder en dur et url. Toujours utiliser l'url aides lorsqu'ils traitent avec des url. Aussi, ne pas fournir les url absolues comme jQuery pense que c'est JSONP (avis de l'
callback=jQuery151022712289774790406_1298625531801
paramètre dans votre demande), tandis que la réponse JSON:Notez également que vos arguments de la fonction sont appelés
settingNameArg
etsettingValueArg
alors que espècesvotre code que vous utilisiezsettingName
etsettingValue
.settingNameArg
etsettingValueArg
. Êtes-vous en disant qu'ils devraient être? L'utilisation de ces noms ne fait aucune différence. Cette fonction est dans un fichier JS externe, de sorte que le code côté serveur n'est pas disponible. Mais le appUrl variable est définie de la même façon dans un autre fichier qui ne peuvent être traités par MVC. Dois-je vérifier qu'il omet le protocole, le schéma, et le nom d'hôte?Je pense que vous peut-être quelque chose avec le JSONP suggestion. Quelles sont les causes de jQuery à penser qu'il doit ajouter que le paramètre de rappel? Ce qui devrait que les paramètres d'url? Je l'ai essayé comme /Compte/SaveSetting et ../Compte/SaveSetting et chaque résultat dans le rappel param.
OriginalL'auteur Darin Dimitrov