我在這裏發現了一堆類似的問題,但在閱讀它們並嘗試了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