jQuery AJAX 函数 - Chrome 抛出“Uncaught SyntaxError: Unexpected number”
Posted
技术标签:
【中文标题】jQuery AJAX 函数 - Chrome 抛出“Uncaught SyntaxError: Unexpected number”【英文标题】:jQuery AJAX function - Chrome throwing "Uncaught SyntaxError: Unexpected number" 【发布时间】:2011-12-12 14:32:26 【问题描述】:我在屏幕上有许多可点击的对象,它们代表通过 COM 组件连接的软件中的对象。
当我点击一个对象时,我会发送对象的名称、会话 ID 和我想要运行的命令。
我尝试实现的特定命令的代码是基于 C# 的 ASP.NET 页面:
case "myClick":
dynamic simObj = S8COM.get_SimObject(Request["id"]);
responseData = "name:" + simObj.Name.ToString() + ",countInRoutes:" + simObj.CountInRoutes.ToString() + ",countOutRoutes:" + simObj.CountOutRoutes.ToString() + ",index:" + simObj.Index.ToString() + ",capacity:" + simObj.Capacity.ToString() + ",completed:" + simObj.Completed.ToString() + ",routeOutMethod:" + simObj.RouteOutMethod.ToString() + "";
break;
这适用于某些对象,但不适用于其他对象,会引发“Uncaught SyntaxError: Unexpected number”异常。
我用来调用这个特定函数的 JS 是:
S8Web.Requestmanager.makeRequest( data: command: "myClick", id: aItem.id , async: true, callback: function(data)
alert(data.CountInRoutes); //Do a vardump of the response
);
还有几个响应,第一个工作正常,而第二个抛出 Unexpected Number 异常:
jsonp1319203225074(name:Start,countInRoutes:0,countOutRoutes:1,index:5,capacity:0,completed:0,routeOutMethod:4);
jsonp1319203225066(name:Process 1,countInRoutes:1,countOutRoutes:1,index:1,capacity:1,completed:0,routeOutMethod:1);
我能看到的唯一可能影响结果的是“进程”和“1”之间的空格。这就是引发此错误的原因吗?
【问题讨论】:
是不是只有chrome浏览器会抛出这个错误? 是的...因为它是一个字符串,您需要将其用引号括起来。name:'Process 1'
【参考方案1】:
您很可能只是对不正确的引号引起了问题。
例子:
<a href='#' onclick="doStuff('joe, '2844')">click here</a>
由于第一个参数没有正确关闭,它被解释为'joe,'。这使得 2844' 作为函数调用的其余部分,没有前导引号。这种情况会抛出 Unexpected Number 错误。
【讨论】:
【参考方案2】:不确定这是否会对您有所帮助,但我在 chrome 中遇到了同样的错误,这是因为我的 json 数据后面有一个“0”:
id: "6"0
0 在 JSON 数据后面,因为我忘记添加“exit;”在我处理 AJAX 调用的 php 函数中。我还建议在 FireFox 中运行相同的代码。很多时候,FireFox 的错误信息比 chrome 更丰富:
错误:SyntaxError: JSON.parse: JSON 数据后出现意外的非空白字符
祝你好运!
【讨论】:
谢谢!我在我的 PHP 函数末尾添加了die()
并解决了 SyntaxError: unexpected number
问题!【参考方案3】:
不确定错误的原因,但考虑让序列化程序完成工作,而不是手动编码。可能有助于处理浏览器中的不同解释。
在这个例子中,我有一个带有字符串属性 param1 + param2 的结构。您也可以轻松地序列化这些列表。
只需构造一个具有您需要的属性的简单结构。
var jss = new javascriptSerializer();
var jsonApp = new StringBuilder();
MyStruct item = new MyStruct();
item.param1 ="111";
item.param2 ="222";
jss.Serialize(item, jsonApp);
Response.Clear();
Response.Headers.Add("Content-type", "application/json");
var resp = HttpContext.Current.Request["callback"] + "(" + jsonApp.ToString() + ")";
Response.Write(resp);
Response.End();
【讨论】:
【参考方案4】:在我的 if 语句中也有一个“0”导致意外的语法:Chrome 中的意外数字,比较是:
if (bcn.length==0 && ecn.length==0 0 && corr.length==0)
额外的 0,看到了吗?前几眼我没看出来。
【讨论】:
以上是关于jQuery AJAX 函数 - Chrome 抛出“Uncaught SyntaxError: Unexpected number”的主要内容,如果未能解决你的问题,请参考以下文章
jQuery .ajax() POST 请求抛出 405(不允许的方法)但 GET 不会
jQuery AJAX 到节点服务器抛出 net::ERR_CONNECTION_REFUSED
jQuery Ajax 到 asp.net asmx web 服务抛出请求格式无效:application/json