更新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,然后复制并粘贴它可以正常工作。
答案 0 :(得分:0)
我就是这样做的,我设置了一个服务器端客户端来使用ASMX webservice。然后使用Fiddler检查它发送到ASMX webserivce的SOAP数据包。这是我需要通过$ .ajax调用发送的确切XML。