51349


大変お世話になっております。

以下の様な設定で、`http://www.test.com/test.html`
というページのhtmlのフォームからユーザーIDとパスワードを入力し、送信ボタンをクリックし、`https://server.com/send1`
へPOST送信すると、一番下に表示されている様に、urlに`https://server.com/send1`と表示されたまま、画面に正しいresponceが表示されます。

javascriptを使用して、responceを取得次第、`https://server.com/send2`に、この返ってきたresponceを付加して自動的に送信しなければならなく、以下の様な設定にしておりますが、`https://server.com/send2`
にリダイレクトされません。

それは、以下のjavascriptの記述に問題があるのか、あるいは画面に表示されているresponseが`http://www.test.com/test.html`に実際には返ってきていないため（urlは`https://server.com/send1`の状態である為）、よってそのページ内にあるjavascriptに読まれていないためなのかなどが分かりません。

どのような記述、設定にすれば上記の目的を達成できるか、ご教授頂けませんでしょうか。

[code]

    http://www.test.com/test.html
    
    <script language="JavaScript"><!--
    
    xhr.onreadystatechange = function() {
    
        if(xhr.readyState === 4 && xhr.status === 200) {
    
            $responce = window.sessionStorage.getItem('responce');
    
            var xhr = new XMLHttpRequest(); 
            xhr.open('POST',  'https://server.com/send2');
            xhr.setRequestHeader('content-type',  'application/x-www-form-urlencoded');
            xhr.send('responce=$responce');
    
        }
    }
    
    </script>
    
    <form action="https://server.com/send1" method="post">
    <input name="USER" id="USER"  type="hidden" value=""/>
    <input name="PWD" id="PWD" type="hidden" value="" />
    <input type="submit" value="送信">
    </form>
    
[/code]

以上のフォームの送信ボタンをクリックすると以下が表示される。（responceは正しい内容）

[code]

    url: https://server.com/send1
    
    画面表示：responce=23swde7688j9jse
    
[/code]

*補足
[code]

    <script type="text/javascript">
    ・・・・・
    function send1(){
        send_flag = true;
        xhr.open( 'POST','https://xxxx.com/send1/', false );
        xhr.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
        xhr.send('USER=u1&PWD=p1');
        xhr.abort();
    }
    
    </script>
    
    <form method="POST">
    <input name="USER" id="USER" type="hidden" value=""/>
    <input name="PWD" id="PWD" type="hidden" value="" />
    <input type="submit" value="送信" onclick="send1()">
    </form>
    
[/code]


CC BY-SA 4.0
2018-12-18T17:12:06.940
51339
2018-12-20T09:08:04.210
2018-12-20T07:31:02.270
19211
19211
question
javascript php html ajax
htmlフォームのpostからのレスポンスを取得し、その値をサーバーに自動送信したいです。


> 以上のフォームの送信ボタンをクリックすると以下が表示される。（responceは正しい内容）

form で submitすると、パラメータを送信して サーバからのレスポンス待ちに状態遷移してしまい、表示やjavascriptなどが初期化されて
サーバからの結果のみが表示されます。

初期化されないようにサーバからのレスポンスを、サーバの別スクリプトへ送り返すには、submit（送信）もXMLHttpRequestなどで行う必要があります。  
(以下のサンプルは、エラー、クロスドメイン制約などは考慮していません。)

[code]

    <script type="text/javascript">
        var xhr = new XMLHttpRequest();
        var send_flag = false;
    
        xhr.onreadystatechange = function() {
            switch ( xhr.readyState ) {
                case 0:
                    console.log( '未初期化' );
                    break;
                case 1:
                    console.log( '送信中' );
                    break;
                case 2:
                    console.log( '待ち' );
                    break;
                case 3:
                    console.log( '受信中:'+xhr.responseText.length+' bytes.' );
                    break;
                case 4:
                    if( xhr.status == 200) {
                        var data = xhr.responseText;
                        console.log( '受信完了:'+data );
                        if(send_flag){
                            var xhr2 = new XMLHttpRequest();
                            send_flag = false;
                            xhr2.open( 'POST','/send2/', false );
                            xhr2.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
                            xhr2.send('USER=u1&PWD=p1');
                            xhr2.abort();
                        }
    
    
                    } else {
                        console.log( '失敗しました: '+xhr.statusText );
                    }
                    break;
            }
        };
    
    function send1(){
        send_flag = true;
        xhr.open( 'POST','/send1/', false );
        xhr.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
        xhr.send('USER=u1&PWD=p1');
        xhr.abort();
    }
    
    
    </script>
        <input type="submit" value="送信" onclick="send1()">
    
[/code]

**追記、JavaScriptで formタグをsubmitするには**  
単純には、あらかじめsend2用の空formを作成しておき JavaScriptでinputタグを追加してからformタグをsubmitします。

**JavaScriptからsubmitする例**

[code]

    　<form name="send2" id="f2" method="get" action="http://yyz.jp/send2/"></form>
    
    <script type="text/javascript">
    var out1 = '<input type="text" value="a" name="USER">';
    out1 += '<input type="text" value="b" name="PWD">';
    document.getElementById('f2').innerHTML = out1;
    document.send2.submit();
    </script>
    
[/code]


CC BY-SA 4.0
2018-12-19T08:30:53.477
51349
2018-12-20T09:08:04.210
2018-12-20T09:08:04.210
22793
22793
51339
answer