2009-12-24 60 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的重要资源。