2013-05-15 47 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功能,並沒有進行測試時。最可能的原因是不正確的參數處理。 對不起,遲到的迴應。謝謝你們。