2010-02-08 47 views

回答

13

假設你需要異步發送POST請求,你可能要檢查下面的例子,讓你在正確的方向前進:

<img src="my_image.png" onClick="postOnClick();"> 

然後你需要的JavaScript函數提交一個異步HTTP POST請求並將瀏覽器重定向到從HTTP響應接收的URL。你應該能夠在下面的例子中使用XMLHttpRequest對於這樣的異步調用,如:

function postOnClick() 
{ 
    var http = new XMLHttpRequest(); 

    var params = "arg1=value1&arg2=value2"; 

    http.open("POST", "post_data.php", true); 

    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    http.setRequestHeader("Content-length", params.length); 
    http.setRequestHeader("Connection", "close"); 

    http.onreadystatechange = function() { 
     if (http.readyState == 4 && http.status == 200) { 
      window.location = http.responseText; 
     } 
    } 

    http.send(params); 
} 

注意,對於一個真正的跨瀏覽器XMLHttpRequest呼叫,您可能需要使用符合標準的跨瀏覽器的XMLHttpRequest實施如XMLHttpRequest.js,除非您使用的是一些JavaScript框架,如jQuery,Prototype,YUI,ExtJS等。

另外,還需要注意的是,上述內容僅適用於發佈到同一域中託管的腳本,否則您將違反same-origin policy,現代網絡瀏覽器將拒絕發送請求。

+0

這是行不通的。 http.responseText是HTML文檔(post_data.php)的主體。您不能重定向到HTML字符串。 – JamesBrownIsDead 2010-02-08 20:51:04

+1

@JamesBrownIsDead:這取決於你從服務器端腳本返回的內容。如果您返回簡單的純文本,則「http.responseText」將僅保存URL。腳本是否返回HTML是否有特定的原因? – 2010-02-08 21:43:55

1

使用輸入類型圖像。

<form action="someUrl.html" method="POST"> 
    <input type="image" src="img.png" width="30" height="30" alt="Submit"> 
</form> 

當你將被重定向到的圖像上單擊以「someUrl.html」和職位將被髮送給它

15

只需綁定的按鈕提交一個表單元素的方法,並且重定向會自然發生。

<script type='text/javascript'> 
function form_send(){ 
    f=document.getElementById('the_form'); 
    if(f){ 
    f.submit(); 
    } 
    } 
</script> 

<form method='post' action='your_post_url.html' id='the_form'> 
    <input type='hidden' value='whatever'> 
</form> 

<span id='subm' onclick='form_send()'>Submit</span> 
+0

這並不處理從響應主體獲取重定向地址。 – friedo 2010-02-08 19:59:46

+1

啊哈,我錯過了那部分問題。它本來可以更清楚地表達出來。 – 2010-02-08 20:05:18

+0

我同意這個問題的含糊不清。我甚至不確定我的答案是否正確地解決了這個問題,儘管它得到了3張最高票數。 (+1來彌補downvotes) – 2010-02-08 20:10:46

2

使用jQuery發佈的數據,並重定向到所需的位置,像這樣:

$.ajax({ 
    type: 'POST', 
    url: 'receivedata.asp', 
    data: 'formValue=someValue', 
    success: function(data){ 
     window.location = data; 
    } 
}); 

您可以刪除data: 'formValue=someValue',如果沒有數據傳遞到你想要發佈到網頁。

+1

不能按預期工作。 'data'檢索請求的響應,在這種情況下,文件'receivedata.asp'而不是url。 – pctroll 2013-08-12 00:08:24

3

代替window.location = http.responseText使用以下命令:

http.onreadystatechange = function() { 
    if (http.readyState == 4 && http.status == 200) { 
    document.open(); 
    document.write(http.responseText); 
    } 
} 

document.open()清除頁面和document.write()嵌入式響應的HTML代碼到您的網頁的當前內容。

相關問題