【发布时间】:2015-07-04 08:19:23
【问题描述】:
我正在使用 Jquery ajax 从数据库接收信息。我测试服务器端方法。它工作正常。当页面中的调用是错误json时: 消息:“无效的 JSON 原语:}。”
堆栈跟踪:
" 在 System.Web.Script.Serialization.JavaScriptObjectDe 序列化程序.BasicDeserialize(字符串输入,Int32 depthLimit,JavaScriptSerializer 序列化程序) depthLimit,JavaScriptSerializer 序列化程序)在 System.Web.Script.Serialization.JavaScriptSerializ er.Deserialize(JavaScriptSerializer 序列化程序,字符串输入,类型类型,Int32 depthLimit)在 System.Web.Script.Serialization.JavaScriptSerializ er.Deserialize[T](字符串输入) 在 System.Web.Script.Services.RestHandler.GetRawParam 的 System.Web.Script.Services.RestHandler.GetRawParam sFromPostRequest(HttpContext context, JavaScriptSerializer 序列化程序) System.Web.Script.Services 的(WebServiceMethodData methodData, HttpContext context)。 RestHandler.ExecuteWebS erviceCall(HttpContext context, WebServiceMethodData methodData)"
ExceptionType:"System.ArgumentException"
方法是:
[WebMethod]
public static ParentDataT_book.OptionBook[] SearchNameBook(string nameBook, int state)
{
var bookBusiness = new T_bookBusiness();
return bookBusiness.GetList(nameBook, (byte)0).ToArray();
}
jquery ajax 代码是:
function searchBook() {
j.ajax({
type: "POST",
url: "Default.aspx/SearchNameBook", //نام صفحه و متد
data: "{'nameBook': '" + j('#ContentPlaceHolder1_txt_nameBook').val() + "', 'state': '" + j('#states').val() - 1 + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
var delay = function () {
AjaxSucceededSearch(msg);
};
setTimeout(delay, 1500); //remove this
},
error: AjaxFailedSearch
});
//});
};
// });
function AjaxSucceededSearch(data) {
if (result.d != null) {
alert("data is found!!!");
}
else
if (result.d == null) {
alert("data is not found!!!");
}
}
function AjaxFailedSearch(result) {
alert(result.status + ' ' + result.statusText);
}
朋友们知道问题出在哪里吗?
【问题讨论】:
-
在控制台中显示此消息:“NetworkError: 500 Internal Server Error - localhost:1036/WebSite_DadVaSetad/Default.aspx/SearchNameBook”。
-
使用 IinternetExplorer 的 F12 工具/“网络”,您可以检查您发送到服务器的 JSON 是否正确。此外,您可以尝试删除状态值的 ',如 'state':" + j('#states').val() - 1 + "}",以便将其序列化为数字
-
我使用这个代码:data: { nameBook: j('#ContentPlaceHolder1_txt_nameBook').val(), state: (parseInt(j('#states').val()) - 1) .我的浏览器是firefox。我里面有firebug。可以用firebug吗?
-
当然,使用 Firebug 中的“网络”面板并重新加载您的页面。然后,您应该会看到对您的页面发出的所有请求。
-
不确定我是否理解你。看看这个:wiki.openiam.com/display/IAMSUITEV3/… 这应该可以帮助您检查您发布到服务器的内容