如何使用ajax发送XML?

时间:2013-08-12 16:19:13

标签: jquery asp.net xml ajax web-services

更新2

仔细阅读有关ajax和数据属性Here的文档后,它说“对象必须是键/值对”,因此我不能只传递任何对象但必须将它包装在某种关联数组中,或JSON,它可以是这样的{theResp:leXmlDoc},因此 contentType:“XML”确实做了什么,我是否正确?

您好我想通过AJAX将数据发送到我的ASMX网络服务。我的意思是想要发送带有contentType的数据:“application / xml”,“text / xml”或“xml”。我似乎无法找到格式化XML的正确方法,以便我的AJAX可以正常工作。如果我将它包装在JSON中,那么我可以毫无问题地发送它。所以我想知道是否有一种特定的方式来形成我的XML?这是m AJAX:我尝试将leXmlDoc作为XMl源字符串传递并作为Dom Document对象。

function sendToServer(leXmlDoc) {
  console.log($.isXmlDoc(leXmlDoc)); //Here I check if leXmlDoc is an XML Document, I   
  also tries using jsut the XML source string
  $.ajax({
    type: 'POST',       
    processData: false, //I also tried setting it to true
    contentType: "xml", //I also tried application/xml, and text/xml
    dataType: "xml",
    url: "/Webservices/TransferXmlData.asmx/SendingXmlToServer",              
    data: leXmlDoc, 
    success: function (data) {
        console.log(data);
    },
    error: function () {
        console.log("there is a problem sending the XML");
    }
  });
};

我的网络服务,我知道这是有效的,因为当我发送一个JSON时,它会返回我发送的数据。除非它需要不同才能接受XML。

  <WebMethod(EnableSession:=True)> _
    Public Function SendingXmlToServer(ByVal theResp As String) As String           
        Return theREsp
    End Function

修改

console.log(leXmlDoc)的输出作为XML源字符串,我检查它是否为string类型

<?xml version="1.0" encoding="UTF-8" ?>
 <Sections> 
<Section>
    <TheGreeting>Hello</TheGreeting>
    <ThePlanet>World</ThePlanet>
    <Puncuation>!</Puncuation>      
</Section>
</Sections> 

以下是作为Dom文档的输出,我使用console.log($。isXmlDoc(leXmlDoc))进行检查,结果为true,typeOf是一个对象,我通过这一段代码创建了leXMLDoc,其中xmlFile是上面的XML源字符串:

var domParser = new DOMParser();
var XmlDOM = domParser.parseFromString(theXmlFile, "application/xml");
sendToServer(XmlDOM);

console.log(leXmlDoc)的输出作为dom Document就是这个

 #document
 <Sections> 
<Section>
    <TheGreeting>Hello</TheGreeting>
    <ThePlanet>World</ThePlanet>
    <Puncuation>!</Puncuation>      
</Section>
</Sections> 

我希望这会有所帮助。

更新1

当我决定使用console.log这样的xhr

   error: function (xhr, ajaxOptions, thrownError) {
        console.log(xhr);
        console.log(xhr.status);
        console.log(ajaxOptions);
        console.log(thrownError);
    }

并打开对象我收到一条错误

responseText: "System.InvalidOperationException: Request format is invalid: xml 
↵   at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
↵   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
↵"

所以看起来格式很糟糕。然而,当我通过导航到这样的

直接进入网络服务时
http://localhost:52530/WebServices/TransferXmlData.asmx/

使用console.log(leXmlDoc(源字符串))的输出手动调用webservice,然后复制并粘贴它可以正常工作。

1 个答案:

答案 0 :(得分:0)

我就是这样做的,我设置了一个服务器端客户端来使用ASMX webservice。然后使用Fiddler检查它发送到ASMX webserivce的SOAP数据包。这是我需要通过$ .ajax调用发送的确切XML。