您好我有以下AJAX引用我的.aspx页面中的方法。我做了一些控制台调试,我的data.d总是未定义的。所以我在引用的方法的第一行的.aspx页面中放了一个断点,它永远不会命中它。
我真的被卡住了 - 所以,如果有人能指出我正确的方向,这将是伟大的。
AJAX:
var param = { "mySearchString": str };
$.ajax({
type: 'POST',
url: 'myForm.aspx/myMethod',
data: JSON.stringify(param),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
async: false,
success: function (data) {
$("#MyResults").empty();
console.log(data);
console.log(data.d);
console.log(data.d.length);
for (i = 0; i < data.d.length; i++) {
$("#MyResults").append("<li><a href='#' onClick='SetName(this)'>" + data.d[i].title + "</" + " a>" + "</" + "li>");
}
if (data.d.length == 0)
{
$("#MyResults").empty();
}
}
});
我的.NET方法的初始设置:
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod(EnableSession = true)]
public static IEnumerable<MyItem> myMethod(string searchString)
{
我正在传递正确的类型,并且在构建或运行时没有错误。所以我有点难过!
答案 0 :(得分:1)
尝试将此添加为签名
的一部分[HttpPost]
答案 1 :(得分:1)
将此添加到您的ajax调用以查看有关错误的更多信息:
error: function (request, status, error) {
alert('Error: ' + error);
}
这是一个MVC应用程序吗?该url实际上应该是myForm.aspx / myMethod还是myForm / myMethod?我得到的是你在服务器端遇到断点并且路径正确吗?
答案 2 :(得分:0)
您可以将以下属性添加到类中,这样就可以从ajax脚本中调用Web方法。
[System.Web.Script.Services.ScriptService]
答案 3 :(得分:0)
你有
var param = { "mySearchString": str };
但是Method中的参数是
public static IEnumerable<MyItem> myMethod(string searchString)
两个参数应该具有相同的名称。
答案 4 :(得分:0)
您将字符串作为参数传递,您应该传递一个名为searchString的字符串属性的对象:
var param = { "mySearchString": str };
$.ajax({
type: 'POST',
url: 'myForm.aspx/myMethod',
data: param,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
async: false,
success: function (data) {
$("#MyResults").empty();
console.log(data);
console.log(data.d);
console.log(data.d.length);
for (i = 0; i < data.d.length; i++) {
$("#MyResults").append("<li><a href='#' onClick='SetName(this)'>" + data.d[i].title + "</" + " a>" + "</" + "li>");
}
if (data.d.length == 0)
$("#MyResults").empty();
}
});
答案 5 :(得分:0)
请删除以下属性,然后移除JSON.stringfy
contentType: 'application/json; charset=utf-8',
dataType: 'json',
并且请不要删除异步,因为如果将其设置为false,它将冻结您的UI。
你可以这样做:$.ajax({
type: 'POST',
url: 'myForm.aspx/myMethod',
data: param,
success: function (data) {
$("#MyResults").empty();
console.log(data);
console.log(data.d);
console.log(data.d.length);
for (i = 0; i < data.d.length; i++) {
$("#MyResults").append("<li><a href='#' onClick='SetName(this)'>" + data.d[i].title + "</" + " a>" + "</" + "li>");
}
if (data.d.length == 0)
{
$("#MyResults").empty();
}
}
});
答案 6 :(得分:0)
我在这里找到了答案:ASP.NET Calling WebMethod with jQuery AJAX "401 (Unauthorized)"
我遇到了这个错误:
Object {Message:Ajax error:“Authentication failed。”,StackTrace: null,ExceptionType:“System.InvalidOperationException”}
原来我需要这样做:
内部~/App_Start/RouteConfig.cs
更改:
settings.AutoRedirectMode = RedirectMode.Permanent;
要:
settings.AutoRedirectMode = RedirectMode.Off;
希望这会帮助别人!