2009-12-24 59 views
4
消費ASP.NET Web服務

這裏有一個有趣的問題:無法從jQuery的

我有一些jQuery的,看起來像這樣:

$(document).ready(function() { 
    $.ajax({ 
     type: "POST", 
     url: "http://localhost:63056/Service1.asmx/PrintOrderRecieptXml", 
     data: {"CouponCode":"TESTCODE","Subtotal":14.2600,"ShippingTotal":7.5000,"TaxTotal":0.0000,"GrandTotal":21.7600,"OrderItemCollection":[{"Total":14.2600,"Qty":250}]}, 
     dataType: "json", 
     contentType: "application/json", 
     error: function(xhr, msg) { alert(xhr.statusText); } 
    });}); 

現在,我遇到的問題是,它的發送請求,但Web服務沒有正確處理它。在IE中,我收到一個帶有「內部服務器錯誤」的警告框,並且使用FireFox,我得到一個沒有任何內容的警告框。

奇怪的是,當我使用IE瀏覽器,我沒有得到我的事件日誌中的錯誤事件,但用Firefox,我得到(搞清楚爲什麼這是加分):

「異常消息:請求格式是無法識別的URL在「/ PrintOrderRecieptXml」

戳我周圍的一些,結果發現,有時你必須添加意外結束:

<webServices> 
    <protocols> 
    <add name="HttpGet"/> 
    <add name="HttpPost" /> 
    <add name="HttpPostLocalhost"/> 

    </protocols> 
</webServices> 

到Web.config,我做到了,但它確實沒有幫助。有趣的是,Web服務可以正常使用SOAP或發送查詢字符串,但不能與JSON一起使用。

任何想法?

回答

8

你需要給你的輸入data屬性作爲一個JSON字符串,而不是作爲一個對象:

$(document).ready(function() { 
    $.ajax({ 
    type: "POST", 
    url: "http://localhost:63056/Service1.asmx/PrintOrderRecieptXml", 
    data: '{"CouponCode":"TESTCODE","Subtotal":14.2600,"ShippingTotal":7.5000,"TaxTotal":0.0000,"GrandTotal":21.7600,"OrderItemCollection":[{"Total":14.2600,"Qty":250}]}', 
    dataType: "json", 
    contentType: "application/json", 
    error: function(xhr, msg) { alert(xhr.statusText); } 
});}); 

Using jQuery to Consume ASP.NET JSON Web Services有要求的很好的解釋交談ASP時.Net Web服務。

+0

+1擊敗我! – 2009-12-24 20:09:41

+0

這似乎是正確的道路。但是,仍然無法在Firefox中使用。在IE中很好用。 – James 2009-12-24 20:25:12

+0

Firefox現在如何失敗?你在服務器上看到請求嗎?請求是否被ASP.Net正確處理?它是否碰到你的錯誤處理程序客戶端? – Annabelle 2009-12-24 21:08:13

3

Douglas是正確的 - 您需要將數據格式化爲字符串。請務必閱讀他鏈接到的博客上的所有帖子。 Encosia是Ajax和Asp.Net的重要資源。