jQuery Ajax()无法访问C#Webmethod

时间:2013-05-15 14:56:38

标签: c# jquery asp.net ajax

我不明白为什么$ .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语句上放置一个断点时,我似乎永远不会到达那里。 我做错了什么?

4 个答案:

答案 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部分

中添加以下部分的web.config
<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函数,并且在测试时没有继续。最可能的原因是参数处理不当。 回复晚了非常抱歉。谢谢大家。