2008-12-08 64 views
36

我正在做一些簡單的測試(準備一個更大的項目)使用JQuery AJAX調用ASP.NET WebMethod。在我的例子中,我的WebMethod返回一個簡單的字符串。但是,當我嘗試使用JQuery調用它時,我得到的是返回的整個HTML頁面內容,而不僅僅是我的字符串。我錯過了什麼?與ASP.NET WebMethod的Jquery AJAX返回整個頁面

客戶端:

$(document).ready(function ready() { 
     $("#MyButton").click(function clicked(e) { 
      $.post("Default.aspx/TestMethod", 
       {name:"Bob"}, 
       function(msg) { 
        alert("Data Recieved: " + msg); 
       }, 
       "html" 
      ); 
     }); 
    }); 

服務器端:

using System; 
using System.Web.Services; 

namespace JqueryAjaxText 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     [WebMethod] 
     public static string TestMethod(string name) 
     { 
      return "The value submitted was " + name; 
     } 
    } 
} 

回答

18

看看這個鏈接。我使用他的一些其他帖子來調用WCF服務,並取得成功。一定要檢查了相關文章:

http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

通讀文章,但它的本質:

$("#Result").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "Default.aspx/GetDate", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
     $("#Result").text(msg.d); 
     } 
    }); 
}); 
+3

確保你的web.config中含有一種等同於這個,這取決於你的版本:`<配置> \t \t \t \t \t \t \t \t \t <添加名稱= 「ScriptModule」 TYPE =「System.Web程序。 Handlers.ScriptModule,System.Web.Extensions程序,版本= 3.5.0.0,文化=中性公鑰= 31BF3856AD364E35" /> \t \t \t \t \t \t` – Nathan 2014-02-04 22:39:55

3

嘗試改變最後一個參數 「HTML」 到 「文本」。該參數指定要返回的數據的類型。

+0

的問題是,該方法不會被調用。 AJAX調用只是接收整個頁面,就像瀏覽器看到它一樣呈現。 – Dana 2008-12-08 05:41:09

+2

您可以嘗試將「html」更改爲「文本」。 – 2008-12-08 05:52:19

8

我想我是越來越與jQuery的$。員額的「類型」參數混淆命令。在與一些人交談後,似乎調用WebMethod的返回類型必須是「json」。我試圖使用「HTML」。一旦我將它改爲「json」,然後一切正常。顯然,用[WebMethod]裝飾的方法只返回JSON,而這正是我的掛斷所在。

感謝您的回覆傢伙。

0

我有完全相同的問題:WebMethod返回整個HTML頁面而不是預期的數據。對我來說,該解決方案由內〜/ App_Start/RouteConfig.cs更改以下行來了:

settings.AutoRedirectMode = RedirectMode.Permanent; 

settings.AutoRedirectMode = RedirectMode.Off;