更新 2
ajaxとdataプロパティについてのドキュメントを注意深く読んだ後、 「オブジェクトはキーと値のペアである必要があります」と書かれているため、オブジェクトを渡すだけではなく、何らかの連想配列またはJSONでラップする必要があります。この {theResp:leXmlDoc} のようなものになるので、contentType:"XML"は本当に何かをしますか?
こんにちは、AJAX 経由で ASMX Web サービスにデータを送信したいと思います。つまり、「application/xml」、「text/xml」、または「xml」という contentType でデータを送信したいということです。AJAX が機能するように XML をフォーマットする正しい方法が見つからないようです。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");
}
});
};
私のWebサービスは、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)) を使用してチェックすると、結果は true です。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
このようにxhrをconsole.logに記録することにしたとき
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()
↵"
そのため、フォーマットが磨耗しているようです。それでも、このようにナビゲートしてWebサービスに直接アクセスすると
http://localhost:52530/WebServices/TransferXmlData.asmx/
そして、console.log(leXmlDoc (ソース文字列)) の出力を使用して Web サービスを手動で呼び出し、それをコピーして貼り付けると正常に動作します。