2

POST メソッドを使用して HTML フォームを REST (eXist db) Web サービスに送信しています。通常の送信では400 の不正な要求が返されます

ここに私のHTMLコードがあります

<html>
    <script type="text/javascript">
     /* function createXMLHttpRequest()
       {
        if( typeof XMLHttpRequest == "undefined" )
        XMLHttpRequest = function() 
         {
          try 
          { 
           return new ActiveXObject("Msxml2.XMLHTTP.6.0")
          } 
         catch(e) {}
          try 
          { 
           return new ActiveXObject("Msxml2.XMLHTTP.3.0")
          } 
         catch(e) {}
          try
          { 
          return new ActiveXObject("Msxml2.XMLHTTP") 
          } 
         catch(e) {}
          try 
          { 
          return new ActiveXObject("Microsoft.XMLHTTP") 
          } 
         catch(e) {}
         throw new Error( "This browser does not support XMLHttpRequest." )
      };
       return new XMLHttpRequest();
     }

var AJAX = createXMLHttpRequest();*/
function submitForm()
 {

    //AJAX.open("POST",'http://localhost:8899/exist/rest/db/xql/sample.xq');
   // AJAX.send(document.form.xmlData.value);
   document.form.submit();
 };
</script>
<head>  
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
 <form name='form' action="http://localhost:8899/exist/rest/db/xql/sample.xq"  enctype="text/plain" method="post">
   <input type="text" name="xmlData"/>
   <input type="button" value="Submit" onclick="submitForm()";>
 </form>
</body>
</html>

コメント付きのコードは、AJAX を使用して POST 要求を送信することです。フォーム送信と AJAX 送信の http ヘッダー要求と応答をキャプチャしました。これらは要求ヘッダーです。

HTML フォーム送信ヘッダー:

(Request-Line)  POST /exist/rest/db/xql/sample.xq HTTP/1.1
Host    localhost:8899
User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Connection  keep-alive
Content-Type    text/plain
Content-Length  26

AJAX 要求ヘッダー:

(Request-Line)  POST /exist/rest/db/xql/sample.xq HTTP/1.1
Host    localhost:8899
User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Connection  keep-alive
Content-Length  16
Content-Type    text/plain; charset=UTF-8
Origin  null
Pragma  no-cache
Cache-Control   no-cache

コードの何が問題なのかわかりません。これに2日間取り組んでいますが、解決策が見つかりません。これを調べて解決策を提供してください。

前もって感謝します。

4

4 に答える 4

0

しかし、Ajax POST でパラメーターを送信していませんか?

Ajax コードは次のようになります。

var xmlData=encodeURIComponent(document.getElementById("xmlData").value);
var parameters="xmlData="+xmlData;
AJAX.open("POST", "'http://localhost:8899/exist/rest/db/xql/sample.xq", true)
AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
AJAX.send(parameters)
于 2012-05-30T07:12:01.193 に答える
0

ターゲットは POST リクエストを受け入れますか、それとも GET のみを受け入れますか?

于 2012-05-30T06:32:51.283 に答える
0

あなたのコードは、あるべき姿でデータをサーバーに送信します。サーバー側のコードに問題があるはずです。

エラー 400 に関する checkupdown.com からの引用

HTTP サイクルで 400 エラー

1.すべてのクライアント (Web ブラウザーや CheckUpDown ロボットなど) は、次のサイクルを実行します。

2. サイトの IP 名 (先頭の「http://」を除いたサイト URL) から IP アドレスを取得します。このルックアップ (IP 名から IP アドレスへの変換) は、ドメイン ネーム サーバー (DNS) によって提供されます。

3. その IP アドレスへの IP ソケット接続を開きます。

4. そのソケットを介して HTTP データ ストリームを書き込みます。

5. 応答として Web サーバーから HTTP データ ストリームを受信します。このデータ ストリームには、HTTP プロトコルによって値が決定されるステータス コードが含まれます。このデータ ストリームを解析して、ステータス コードやその他の有用な情報を取得します。

このエラーは、クライアントが「400」として認識する HTTP ステータス コードを受信したときに、上記の最後の手順で発生します。

于 2012-05-30T06:07:14.760 に答える
0

データの値のみを送信しているためだと確信しています。

name = value ペアを送信する必要があります。

于 2012-05-30T05:58:59.590 に答える