1. ホーム
  2. javascript

[解決済み] Window.openとpostメソッドによるパラメータ渡し

2022-08-07 03:34:20

質問

window.openメソッドで、postメソッドで渡さなければならないパラメータを持つ新しいサイトを開いています。これは私のコードです。

<script  type="text/javascript">    
function openWindowWithPost(url,name,keys,values)
{
    var newWindow = window.open(url, name);

    if (!newWindow) return false;

    var html = "";
    html += "<html><head></head><body><form id='formid' method='post' action='" + url +"'>";

    if (keys && values && (keys.length == values.length))
        for (var i=0; i < keys.length; i++)
            html += "<input type='hidden' name='" + keys[i] + "' value='" + values[i] + "'/>";

    html += "</form><script type='text/javascript'>document.getElementById(\"formid\").submit()</sc"+"ript></body></html>";

    newWindow.document.write(html);
    return newWindow;
}
</script>  

次に、配列を作成します。

<script type="text/javascript">    
var values= new Array("value1", "value2", "value3") 
var keys= new Array("a","b","c") 
</script>  

で、関数を呼び出す。

<input id="Button1" type="button" value="Pass values" onclick="openWindowWithPost('test.asp','',keys,values)" />   

しかし、このボタンをクリックすると、サイト test.asp は空っぽです (もちろん、値を渡そうとします -) 。 Request.Form("b") ).

なぜパス値が取得できないのか、どうすれば解決できるのか。

どのように解決するのですか?

新しいウィンドウにフォームを書き込む代わりに(HTMLコードに値のエンコーディングがあるため、正しく書き込むのが難しい)、空のウィンドウを開き、そこにフォームを書き込むだけです。

例を挙げます。

<form id="TheForm" method="post" action="test.asp" target="TheWindow">
<input type="hidden" name="something" value="something" />
<input type="hidden" name="more" value="something" />
<input type="hidden" name="other" value="something" />
</form>

<script type="text/javascript">
window.open('', 'TheWindow');
document.getElementById('TheForm').submit();
</script>

編集する

フォームの値を動的に設定するには、次のようにすればよいでしょう。

function openWindowWithPost(something, additional, misc) {
  var f = document.getElementById('TheForm');
  f.something.value = something;
  f.more.value = additional;
  f.other.value = misc;
  window.open('', 'TheWindow');
  f.submit();
}

フォームを投稿するには、次のように値を指定して関数を呼び出します。 openWindowWithPost('a','b','c'); .

注:パラメータ名は同じである必要はないことを示すために、フォーム名と関連させて変化させました。通常は、値を追跡しやすくするために、互いに類似した名前にしておくでしょう。