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 &amp;&amp; ecn.length==0 0 &amp;&amp; corr.length==0)

额外的 0,看到了吗?前几眼我没看出来。

【讨论】:

以上是关于jQuery AJAX 函数 - Chrome 抛出“Uncaught SyntaxError: Unexpected number”的主要内容,如果未能解决你的问题,请参考以下文章

jQuery .ajax() POST 请求抛出 405(不允许的方法)但 GET 不会

iframe 嵌入代码抛出 403 错误

jQuery AJAX 到节点服务器抛出 net::ERR_CONNECTION_REFUSED

jQuery Ajax 到 asp.net asmx web 服务抛出请求格式无效:application/json

Chrome 中 JQuery 停止和挂起的 ajax 请求

jQuery Ajax 发布请求在 Chrome 上挂起