javascript - Chrome 返回 "SyntaxError: Unexpected token"

标签 javascript json google-chrome jquery

好吧,这个问题已经被频繁地询问过,而且有很多变体,但我仍然没有找到任何可以让我摆脱这种折磨的答案。

我的代码适用于 Safari、Internet Explorer v.8。但是,Chrome 会抛出“SyntaxError: Unexpected token”消息 - 仅在特定组合中(它是关于 chained 的)。

以下是我从 ASP(经典)页面返回的 JSON。它适用于 99% 的输入,但对于以下 JSON 文本,它会抛出错误:

{"queryStatus":"Not_Empty", "printID":["50674","54648","50437","37564","37566","37565","49124","null"], "printName":["BBB-12312313","BBB-1558","BBB-2-065 + 2-066","BBB-2-217","BBB-2-217b","BBB-2-226/2-217b ","BBB-2-5961b","null"]}

现在,我的JS代码如下:

$.ajax({
                    type: "GET",
                    url: "callbacks/xmlHTTPRequestGetPrintItems.asp?LabelID=" + $("#LicenseLabel").val() + "&RequestType=0",
                    data: "",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    async: false,
                    success: function (data, textStatus, jqXHR) {
                        if (data.queryStatus == "Not_Empty") {
                            for (i = 0; i < data.printID.length - 1; i++) {
                                $('#ApprovalItem').append($('<option>', { value: data.printID[i] }).text(data.printName[i]));
                            }
                        }
                    },
                    error: function (xhr, ajaxOptions, thrownError) { alert(thrownError); }
});

结果:“语法错误:意外的标记”

这是我尝试过的:

  1. 更改“contentType”/删除它,包括 $.ajax 选项和服务器端页面的响应;
  2. 寻找特殊字符 - 没有;
  3. 取出对象末尾的“空”字符串;

我已经阅读了我可能从数据库中检索到的零宽度间距(也许是 Unicode-200B?),但我还没有设法解决它。

再次 - 它在 Chrome 上适用于 99% 的输入,在 IE 8 上它适用于 100%。 将不胜感激,干杯。

最佳答案

这可能有效也可能无效。我无法用上述信息重现问题,这显然很难帮助你,但这是我的第一个建议......

$.ajax({
    type: "GET",
    url: "callbacks/xmlHTTPRequestGetPrintItems.asp?LabelID=" + $("#LicenseLabel").val() + "&RequestType=0",
    data: "",
    contentType: "application/json; charset=utf-8",
    dataType: "text",
    async: false,
    success: function (data, textStatus, jqXHR) {
        data = JSON.parse(data);
        if (data.queryStatus == "Not_Empty") {
            for (i = 0; i < data.printID.length - 1; i++) {
                $('#ApprovalItem').append($('<option>', { value: data.printID[i] }).text(data.printName[i]));
            }
        }
    },
    error: function (xhr, ajaxOptions, thrownError) { alert(thrownError); }
});

我所做的只是将数据类型指定为文本,而不是 JSON,然后在返回时使用 JSON.parse()。它至少会确定错误是调用还是响应(但我想我们已经知道了)。

关于javascript - Chrome 返回 "SyntaxError: Unexpected token",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18764138/

相关文章:

javascript - Chrome 不记得输入字段的值

javascript - 基于 bool 变量向按钮添加和减去方法的简单方法是什么?

javascript - 表达异步发布请求

javascript - 获取未定义的值而不是返回的字符串?

javascript - slim typescript 上的 slim 自定义事件

java - 在java spring boot应用程序中将projectionlist转换为json格式

html - CSS 不能在 IE 和 Chrome 中工作,但可以通过 Chrome 在 CodePen 中工作

javascript - 如何将 JSON 数组与模板文字一起使用?

javascript - 解析前两个 JSON 对象的 JSON 结构?

css - 背景重复回合在 Chrome 中不起作用