2

更新 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 サービスを手動で呼び出し、それをコピーして貼り付けると正常に動作します。

4

1 に答える 1

0

これが私がやった方法です。ASMX Webサービスを使用するためにサーバー側クライアントをセットアップしました。次に、Fiddler を使用して、ASMX Web サービスに送信した SOAP パケットを検査しました。これは、$.ajax 呼び出しで送信する必要があった正確な XML でした。

于 2014-02-24T10:10:58.827 に答える