我在这里发现了一堆类似的问题,但在阅读它们并尝试了3个小时后,我发布了自己的帖子。我为重复道歉,但我不知道这里发生了什么。jQuery发布导致未捕获的SyntaxError:意外的令牌:
所以我有这个JavaScript函数:
function saveSetting(settingName, settingValue) {
$.post(
appUrl + "Account/SaveSetting",
{ settingName: settingName, settingValue: settingValue },
function (data) {
alert(data.Result);
},
"json"
);
}
我称之为是这样的:
saveSetting("bookFontSize", fontSize);
其中fontSize的是 “10.5” 或类似的东西。
Chrome的报告后标题是这样的:
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
这都到了C#/ ASP.NET MVC3动作,看起来像这样:
[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) });
}
其中,根据铬,返回此:
{"Result":"Set bookFontSize to 10.5."}
它看起来像合法的json给我。不过,我得到这个错误在Chrome:
Uncaught SyntaxError: Unexpected token :
,这一个在IE 7和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
我绝对没有6700万行代码:)
不管怎么说,有没有人知道这里发生了什么?我的警报不运行。 IE永远不会实际收到请求,但Chrome会。
我觉得这个函数实际上可以在很久以前用过jQuery的早期版本,设置为$.ajaxSettings.traditional = true
,但现在它不能工作(jQuery 1.5.1),有或没有这个设置。
更新:我明白了。我用调试器浏览了javascript。出于某种原因,在jQuery的.ajax()调用中,它正在进入jquery.validate.js。为什么会这样做?我已经包含了该文件,但没有在任何地方使用它。我通过简单地不再引用jquery.validate.js来消除错误。但是这种吸引力,因为如果我想在未来使用验证功能呢?
所以我现在的问题是“为什么在我的项目中有jquery.validate.js会把所有东西搞砸?
更新2:jquery.validate.js中存在一个错误,该错误现已在github上的该项目的一个分支中修复。详情请参阅我的回答。我甚至没有使用该文件的验证功能,只是将其包括在页面供以后使用。它妨碍事情并且破坏事物。 jquery.validate.js关于修复的作者请注意:“通过使用jQuery.ajaxSettings修复jQuery 1.5-代码,而不是修复window.ajaxSettings(是的,那是愚蠢的)。”
真棒找到。你救了我几个小时。 – CreativeNotice 2011-03-10 14:52:34