我需要使用$ .get()從WfService.asmx文件中調用一個簡單的方法。
它正常工作與POST method.Here的方法:
[WebMethod]
public int Sum()
{
return 10 + 10;
}
現在的代碼使用jQuery:
$.get('WfService.asmx/Soma',function(data){ alert(data.d);},"json");
,我得到一個錯誤信息。 我在做什麼錯?
我需要使用$ .get()從WfService.asmx文件中調用一個簡單的方法。
它正常工作與POST method.Here的方法:
[WebMethod]
public int Sum()
{
return 10 + 10;
}
現在的代碼使用jQuery:
$.get('WfService.asmx/Soma',function(data){ alert(data.d);},"json");
,我得到一個錯誤信息。 我在做什麼錯?
爲了與SOAP Web服務通信,您必須發送符合服務定義的WSDL的格式正確的SOAP XML。除非您已明確設置ASP.NET Web服務返回JSON數據,否則您將無法在不首先創建SOAP消息的情況下發出$ .get()請求。
一旦我在ASP.NET Web服務中包含了明確的JSON返回值,那麼使用JQUERY的調用是否正確? – ozsenegal 2010-01-23 02:23:25
我知道這是一分鐘,但是應該是。 – 2010-03-11 23:52:17
要獲得使用jQuery的ASP.NET SOAP的Web服務(ASMX),你首先必須添加一個ScriptServiceAttribute
(在System.Web.Script.Services
找到)服務本身:
[ScriptService] // <--- here
public class MyWebService : WebService
{
[WebMethod]
public int Sum(int x, int y)
{
return x + y;
}
}
如果項目不作爲一個ASP.NET AJAX項目創建,您可能需要使用以下修改web.config
:
<configuration>
<system.web>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpHandlers>
</system.web>
</configuration>
(注 - 更新相應版本的System.Web.Extensions
集引用 - 這是ASP.NET AJAX 1.0,不捲曲NT。我沒有2.0的信息,否則我會發布它)
jQuery代碼可以寫成像這樣:
$.ajax({
type: "POST",
url: "/MyWebService.asmx/Sum",
data: "{x: 2, y: 5}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$("#Result").html(msg);
}
});
注意,這將打破依賴於XML的任何客戶端服務 - 我假設爲了這個答案,Web服務的唯一使用者將是使用jQuery或至少JavaScript的網站。如果您需要支持這兩種情況,那麼您將需要創建兩個Web服務。
你讀過代碼嗎?我在談論GET請求,而不是POST.Post是沙箱。這裏的問題s:如何使用$ .get調用SOAP Web服務,另外我不想傳遞任何參數。 – ozsenegal 2010-01-23 07:19:42
@ozsenegal:是的,我閱讀了代碼。 ASMX Web服務**不支持'GET'語義。**您可以使用WCF而不使用SOAP。使用Ajax'POST'代替的問題是什麼?你是什麼意思「沙箱?」如果你不想傳遞任何參數,那就把'data'留空。 – Aaronaught 2010-01-23 14:25:50
好吧,我知道了。它會導致SOAP Web服務不支持GET請求,好。謝謝。 – ozsenegal 2010-01-23 15:19:10
例如張貼@Aaronaught工作,但只有一個音符=>你需要的屬性添加到您的Web服務方法:
[ScriptMethod(UseHttpGet = true,ResponseFormat=ResponseFormat.Json)]
例如:
[WebMethod(EnableSession = true)]
[ScriptMethod(UseHttpGet = true,ResponseFormat=ResponseFormat.Json)]
public int Add(int num1,int num2) {
return num1 + num2;
}
而在你JQUERY AJAX調用你需要改變類型從POST到GET.I工作與.NET 4,我也不需要這個配置在web.config文件..
乾杯
不用理會它可能是一個SOAP服務的事實 - 是嗎?你會得到什麼樣的錯誤? – 2010-01-23 02:01:51
是的,這是一個SOAP服務。錯誤是這樣的:「錯誤的格式查詢字符串」。 – ozsenegal 2010-01-23 02:09:54