更新 2
在仔细阅读了关于 ajax 和数据属性的文档之后,这里说“对象必须是键/值对”,因此我不能只传递任何对象,而是必须将其包装在某种关联数组或 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
编辑
作为 XML 源字符串的 console.log(leXmlDoc) 的输出,我检查它是字符串类型
<?xml version="1.0" encoding="UTF-8" ?>
<Sections>
<Section>
<TheGreeting>Hello</TheGreeting>
<ThePlanet>World</ThePlanet>
<Puncuation>!</Puncuation>
</Section>
</Sections>
这是作为 Dom 文档的输出,我使用 console.log($.isXmlDoc(leXmlDoc)) 检查结果为真,typeOf 是一个对象,我通过这段代码创建了 leXMLDoc,其中 theXmlFile 是 XML 源上面的字符串:
var domParser = new DOMParser();
var XmlDOM = domParser.parseFromString(theXmlFile, "application/xml");
sendToServer(XmlDOM);
作为 dom 文档的 console.log(leXmlDoc) 的输出是这样的
#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 (Source string)) 的输出手动调用 web 服务,然后复制和粘贴它工作正常。