我一直在尝试并尝试学习JQuery,使用AJAX来消费我前一段时间编写的SOAP Web服务。以下是我正在使用的代码:
<script type="text/javascript"> var webServiceURL = 'http://local_server_name/baanws/dataservice.asmx?op=GetAllCategoryFamilies'; var soapMessage = '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Body><GetAllCategoryFamilies xmlns="http://tempuri.org/" /></soap12:Body></soap12:Envelope'; function CallService() { $.ajax({ url: webServiceURL, type: "POST", dataType: "xml", data: soapMessage, contentType: "text/xml; charset=\"utf-8\"", success: OnSuccess, error: OnError }); return false; } function OnSuccess(data, status) { alert(data.d); } function OnError(request, status, error) { alert('error'); } $(document).ready(function() { jQuery.support.cors = true; }); </script> <form method="post" action=""> <div> <input type="button" value="Call Web Service" onclick="CallService(); return false;" /> </div> </form>
当前,在Web服务中被调用的方法返回一个类别族数组,其中包含一个类别代码和一个类别描述。由于该方法返回XML,因此我相应地设置了ajax查询。但是,当我运行该应用程序时,我收到一个“错误”警报框- 我确定是什么引起了问题。我知道该Web服务可以正常工作,每天我写的其他.NET Web应用程序都会调用它数百次。
任何帮助将不胜感激。
谢谢,
尝试设置processData: false标志。这个标志是true默认的,我想jQuery正在将 XML 转换为字符串。
processData: false
true
$.ajax({ url: webServiceURL, type: "POST", dataType: "xml", data: soapMessage, processData: false, contentType: "text/xml; charset=\"utf-8\"", success: OnSuccess, error: OnError });