我有一个控件,它有一个文本框,当它的内容发生变化时,会使这个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
textStatus:parsererror
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
。
有什么想法吗?
答案 0 :(得分:20)
尝试从Ajax参数中删除contentType
和dataType
并自动识别它们
答案 1 :(得分:1)
与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响应,一切正常!
答案 2 :(得分:0)
不确定[WebMethod],但似乎存在问题,并且它与该方法的输出有关。它必须是ajax方法的良好形成的JSON才能工作。 所以我要做的是在一个单独的窗口中检查调用以查看响应并使用类似http://jsonlint.com/的内容来确保它的格式正确。