我不明白为什么$ .ajax()函数无法访问我的[WebMethod]。
以下是jQuery:
$('.BasketUpdaterSubmit').click(function() {
$.ajax({
url: '/Ajax/AjaxCalls.aspx/UpdateAsyncBasket',
type: 'POST',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "{'name' : 'Ivan'}",
success: function(data) { alert(data); },
error: function(xhr) { alert("Damn!"); }
});
这是C#代码:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string UpdateAsyncBasket(string name)
{
// random stuff
return "Received : \t " + name;
}
当我在return语句上放置一个断点时,我似乎永远不会到达那里。 我做错了什么?
答案 0 :(得分:1)
根据我对这些内容的经验,我认为JS必须放在.NET的页面加载javascript函数中才能访问C#web方法。
function pageLoad(sender, eventArgs) { }
答案 1 :(得分:1)
试试这段代码,
$(document).on("click",".BasketUpdaterSubmit",function(){
$.ajax({
url: '/Ajax/AjaxCalls.aspx/UpdateAsyncBasket',
type: 'POST',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "{'name' : 'Ivan'}",
success: function(data) { alert(data); },
error: function(xhr) { alert("Damn!"); }
});
});
您必须在system.web
部分
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
以上代码应该有效(在我的机器上测试)。我最好的建议是为此创建一个Web服务。所以你可以省略页面生命周期。 您可以参考以下示例以了解如何正确执行此操作 http://tutorials.cmsnsoftware.com/2011/01/how-to-call-csharp-function-in-ajax.html
答案 2 :(得分:1)
尝试使用GET
代替POST
。我有一些使用类似的javascript工作正常的网页方法,但用这个方法装饰了方法,而不仅仅是[WebMethod]
:
[WebMethod, ScriptMethod(UseHttpGet = true)]
然后确保你的ajax调用指定GET:
$('.BasketUpdaterSubmit').click(function() {
$.ajax({
url: '/Ajax/AjaxCalls.aspx/UpdateAsyncBasket',
type: 'GET',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "{'name' : 'Ivan'}",
success: function(data) { alert(data); },
error: function(xhr) { alert("Damn!"); }
});
答案 3 :(得分:0)
我们弄清楚发生了什么。 似乎有一个默认的ajax设置函数干扰了我的jquery函数,并且在测试时没有继续。最可能的原因是参数处理不当。 回复晚了非常抱歉。谢谢大家。