【问题标题】:jquery ajax 200 OK JSON.ParseErrorjquery ajax 200 OK JSON.ParseError
【发布时间】:2013-04-15 10:21:41
【问题描述】:

我有一个控件,它有一个文本框,当它的内容发生变化时,它会欺骗这个 javascript 函数:

page 参数是 document.URL,因为控件没有附加的 .asxc 页面,fieldValue 是文本框的值。

function UpdateFieldsOnListSelection(page, fieldValue) {
    $.ajax({
        type: "POST",
        url: page + "/IsSelectedListPictureLibrary",
        data: { "libraryInfo": fieldValue },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            alert("Success!");
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert("jqXHR: " + jqXHR.status + "\ntextStatus: " + textStatus + "\nerrorThrown: " + errorThrown);
        }
    });
};

它一直抛出这个错误:

jqXHR:200
文本状态:解析器错误
errorThrown: SyntaxError: JSON.parse: 意外字符

IsSelectedListPictureLibrary的代码:

[WebMethod]
public static bool IsSelectedListPictureLibrary(string libraryInfo)
{
    if (string.IsNullOrEmpty(libraryInfo)) return false;

    var common = new Utility();
    var storedLibraryInfo = common.GetStoredLibraryInfo(libraryInfo);

    if (storedLibraryInfo == null) return false;

    var web = SPContext.Current.Site.OpenWeb(storedLibraryInfo.WebId);
    var spList = web.Lists[storedLibraryInfo.LibraryId];

    if (spList.BaseTemplate == SPListTemplateType.PictureLibrary)
    {
        web.Dispose();
        return true;
    }

    web.Dispose();
    return false;
}

我尝试将 ajax 中的 json 更改为 jsonp,但出现了同样的错误。
我尝试更改data 的格式。

有什么想法吗?

【问题讨论】:

  • 响应是什么样的?
  • 尝试将Ajax参数中的contentTypedataType去掉,让他们自动识别
  • @RaraituL 这行得通。您能否发表您的评论作为答案,以便我将其作为答案。
  • @Daniel Ziga:太好了..我现在就去做

标签: jquery webmethod


【解决方案1】:

尝试从Ajax参数中去掉contentTypedataType,让他们自动识别

【讨论】:

  • 为我解决了。谢谢!
  • 我已经工作了 2 天,尝试每个人的“解决方案”来解决这个问题。您的建议是为我解决问题的建议。非常感谢。
  • @ihatemash 很高兴它对你有所帮助!
【解决方案2】:

AJAX 的“post”命令也有同样的问题。

发送 JSON 发布请求,得到 200 OK 响应,但 textStatus 为 parseerror,errorThrown 为 SyntaxError: JSON.parse: unexpected character

这是我的 JS 代码:

$.post(url, JSON.stringify(reportVarsJson), function(response) {}, 'json')
.fail(function(jqXHR, textStatus, errorThrown) {
    alert('Error saving report request variables:\n\n' + jqXHR.responseText);
});

问题原来是我的服务器视图 (Django) 返回了一个空响应,它不是 JSON 响应。

我更改了我的服务器视图以返回一个空的 json 响应,并且一切正常!

【讨论】:

    【解决方案3】:

    不确定[WebMethod],但似乎问题存在,并且与该方法的输出有关。它必须是格式良好的 JSON 才能使 ajax 方法正常工作。 所以我要做的是在单独的窗口中检查调用以查看响应并使用http://jsonlint.com/ 之类的东西来确保它的格式正确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      相关资源
      最近更新 更多