Asp.net aspx和jquery.ajax总是返回一个错误
这段代码在mvc2中运行良好,但又回到了传统的ASPX(因为Sharepoint 2010)。我遇到了错误。有人能告诉我这个框架的错误吗 此ajax调用位于$.ready中Asp.net aspx和jquery.ajax总是返回一个错误,asp.net,jquery,webmethod,Asp.net,Jquery,Webmethod,这段代码在mvc2中运行良好,但又回到了传统的ASPX(因为Sharepoint 2010)。我遇到了错误。有人能告诉我这个框架的错误吗 此ajax调用位于$.ready中 $.ajax({ type: "POST", dataType: "json", data: 'siteName=a&siteUrl=b', url: 'Wizard.aspx/DoesNameUrlExist', beforeSend:
$.ajax({
type: "POST",
dataType: "json",
data: 'siteName=a&siteUrl=b',
url: 'Wizard.aspx/DoesNameUrlExist',
beforeSend: function () { alert("before send"); },
complete: function () { alert("complete"); },
success: function (data) { alert("success"); },
error: function (data) {
if ($("meta[name=debug]").attr("content") == "true") {
//Full Error when debugging
var errDoc = window.open();
errDoc.document.write(data.responseText);
errDoc.document.close();
}
else {
// generic error message for production use
alert("An unexpected error occurred.");
} return false;
}
});
代码隐藏
[WebMethod]
public static string DoesNameUrlExist(string siteName, string siteUrl)
{
//do something
return someString;
}
每次我都会收到一个错误。如果您将
contentType
声明为json,并且响应内容类型不是json,那么jQuery中的Ajax调用总是会给您一个错误。如果来自WebMethod的响应有一些不同的内容(例如html或文本),您将始终收到该错误。您可以在方法上设置该响应类型,如下所示:
[WebMethod]
[ScriptMethod (UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static string DoesNameUrlExist(string siteName, string siteUrl)
Response.ContentType = "application/json";
在WebMethods之外,也可以这样实现:
[WebMethod]
[ScriptMethod (UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static string DoesNameUrlExist(string siteName, string siteUrl)
Response.ContentType = "application/json";
您需要向服务发送JSON,并通过
contentType
标题指示您正在这样做:
$.ajax({
type: "POST",
contentType: 'application/json',
data: '{"siteName":"a","siteUrl":"b"}',
url: 'Wizard.aspx/DoesNameUrlExist',
beforeSend: function () { alert("before send"); },
complete: function () { alert("complete"); },
success: function (data) { alert("success"); },
error: function (data) {
if ($("meta[name=debug]").attr("content") == "true") {
//Full Error when debugging
var errDoc = window.open();
errDoc.document.write(data.responseText);
errDoc.document.close();
}
else {
// generic error message for production use
alert("An unexpected error occurred.");
} return false;
}
});
更多信息请点击此处:
另外,如果您使用的是jQuery 1.4,那么可以删除
数据类型 您知道错误消息是什么吗?因为他正在调用一个page方法,所以输入参数需要JSON,并且它也会自动在响应上设置应用程序/JSON
内容类型。不需要手动操作。我认为只有在您指定json的情况下才需要json作为输入。我们过去使用过pageMethods,但没有传入JSONY,如果没有参数,您可能会侥幸逃脱,但您必须将JSON输入参数与静态“page methods”和ASMX“ScriptServices”一起使用。您可能没有注意到,在过去,如果您使用ScriptManager通过PageMethod.YourMethodName()语法调用页面方法。在这种情况下,MicrosoftAjax.js会自动处理客户端JSON序列化。好吧,那么,当您启动ajax调用来判断是正常的页面提交回发还是ajax调用时,最好的方法是什么?似乎我的ajax调用和表单提交正在发回。我理解表单提交应该是这样的,但我不认为ajax调用最终会出现在Page_Load事件中。有代码示例吗?我的代码从未自动命中WebMethods。您需要在aspx页面上安装scriptmanager吗?@Anthony:如果您不使用内容类型为application/json的POST请求,则对页面方法的调用将在页面加载事件中结束,因为否则它不会命中页面方法。您不需要脚本管理器。你试过我答案中的密码了吗?这是通过jQuery调用页面方法必须采用的方法。