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