2013-05-15 48 views
0

我不明白为什么$ .ajax()函数无法访问我的[WebMethod]。jQuery Ajax()无法达到C#Web方法

这里是下面的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语句我似乎从来没有到那里。 我在做什么错?

+1

你可以静态访问'/ Ajax/AjaxCalls.aspx/UpdateAsyncBasket'(在网络浏览器中?) – karthikr

+0

你的json似乎也不是有效的json,请问ASP关心它是不是有效的json? (单引号应该是双精度) –

+0

你的'click()'事件是否真的执行? –

回答

1

根据我对这些东西的经验,我想JS必须放在.NET的页面加载JavaScript函数中才能访问C#web方法。

function pageLoad(sender, eventArgs) { }

+0

不,不需要。 – Darren

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!"); } 
    });  
}); 

而web.config中必须添加以下的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

1

尝试GET,而不是一个POST。我有做工精细用类似于JavaScript的一些Web方法,但装饰的方法与此,而不是仅仅[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!"); } 
}); 
+0

一旦我再次访问我的代码,将立即尝试此操作。 – mtt

0

我们想出了发生了什么事。 似乎有一个默认的ajax设置功能,它干扰我的jquery功能,并没有进行测试时。最可能的原因是不正确的参数处理。 对不起,迟到的回应。谢谢你们。