2011-12-26 109 views
12

無論如何發送發佈數據到一個PHP腳本以外的表單? (當然不使用GET)。發送POST數據到PHP而不使用HTML表單?

我希望JavaScript在X秒後重新加載頁面,並同時向頁面發佈一些數據。我可以用GET來做,但我寧願使用POST,因爲它看起來更乾淨。

非常感謝。

編輯:有可能做PHP頭?我敢肯定,這是更好的使用jQuery但我目前的狀況我可以實現一個更容易/更快:)

乾杯

我最後做它像這樣:

<script> 
    function mySubmit() { 
    var form = document.forms.myForm; 
    form.submit(); 
    } 
</script> 

... 

<body onLoad="mySubmit()";> 
    <form action="script.php?GET_Value=<?php echo $GET_var ?>" name="myForm" method="post"> 
    <input type="hidden" name="POST_Value" value="<?php echo $POST_Var ?>"> 
    </form> 
</body> 

似乎爲我工作正常,但請說出是否有任何問題!

謝謝大家。

+0

你可以,如果你想避免使用AJAX,都隱藏表單,或動態創建一個,只是提交超時後使用Javascript形式。 AJAX可能是最好的解決方案,它完全取決於你想要做什麼,AJAX可以爲你提供更多的空間來優雅地處理錯誤。 – DaveRandom 2011-12-26 20:53:54

+0

啊是的,這聽起來對我來說是可能的,我敢肯定其他的建議是更好的整體,但這是一個小項目,這個解決方案聽起來像它適合我的編碼風格:) – 2011-12-26 20:57:55

+0

看到我的答案如何這可以是在無框架的Javascript中完成。 – DaveRandom 2011-12-26 21:19:31

回答

18

如上要求,這是 如何動態添加隱藏表單並在您想刷新頁面時提交。

某處在你的HTML:

<div id="hidden_form_container" style="display:none;"></div> 

而且一些JavaScript:

function postRefreshPage() { 
    var theForm, newInput1, newInput2; 
    // Start by creating a <form> 
    theForm = document.createElement('form'); 
    theForm.action = 'somepage.php'; 
    theForm.method = 'post'; 
    // Next create the <input>s in the form and give them names and values 
    newInput1 = document.createElement('input'); 
    newInput1.type = 'hidden'; 
    newInput1.name = 'input_1'; 
    newInput1.value = 'value 1'; 
    newInput2 = document.createElement('input'); 
    newInput2.type = 'hidden'; 
    newInput2.name = 'input_2'; 
    newInput2.value = 'value 2'; 
    // Now put everything together... 
    theForm.appendChild(newInput1); 
    theForm.appendChild(newInput2); 
    // ...and it to the DOM... 
    document.getElementById('hidden_form_container').appendChild(theForm); 
    // ...and submit it 
    theForm.submit(); 
} 

這相當於提交此HTML表單:

<form action="somepage.php" method="post"> 
    <input type="hidden" name="input_1" value="value 1" /> 
    <input type="hidden" name="input_2" value="value 2" /> 
</form> 
+0

我發佈了我在最終問題/ OP中使用的內容(不確定你在這裏稱之爲什麼) – 2011-12-27 00:26:05

5

您可以使用jQuery張貼到PHP頁面: http://api.jquery.com/jQuery.post/

+0

看起來我需要學習Ajax和JQuery來推進......我一直在努力做的很多事情看起來像是可以讓他們更容易完成。然而,我從來沒有碰過這樣的短期內我不能真正使用它(直到我瞭解JQuery)。非常感謝。 – 2011-12-26 20:46:11

1

您可以發送你想要重新加載頁面之前發佈的數據XHR請求。

只有在xhr請求完成時才重新加載頁面。

所以基本上你會想做一個同步請求。

2

的jQuery:

$.ajax({ 
    url: "yourphpscript.php", 
    type: "post", 
    data: json/array/whatever, 

    success: function(){ // trigger when request was successfull 
    window.location.href = 'somewhere' 
    }, 
    error: anyFunction // when error happened 
    complete: otherFunction // when request is completed -no matter if the error or not 
    // callbacks are of course not mandatory 
}) 

或簡單:

$.post("yourphpscript.php", data, success_callback_as_above); 

更多http://api.jquery.com/jQuery.ajax

2

形成你自己的頭,因爲這樣的:

POST /submit.php HTTP/1.1 
Host: localhost 
User-Agent: Mozilla/4.0 
Content-Length: 27 
Content-Type: application/x-www-form-urlencoded 

userId=admin&password=letmein 
3

如何:

function redirectWithPostData(strLocation, objData, strTarget) 
{ 
    var objForm = document.createElement('FORM'); 
    objForm.method = 'post'; 
    objForm.action = strLocation; 

    if (strTarget) 
     objForm.target = strTarget; 

    var strKey; 
    for (strKey in objData) 
    { 
     var objInput = document.createElement('INPUT'); 
     objInput.type = 'hidden'; 
     objInput.name = strKey; 
     objInput.value = objData[strKey]; 
     objForm.appendChild(objInput); 
    } 

    document.body.appendChild(objForm); 
    objForm.submit(); 

    if (strTarget) 
     document.body.removeChild(objForm); 
} 

使用這樣的:

redirectWithPostData('page.aspx', {UserIDs: getMultiUserSelectedItems()},'_top'); 
0

使用FormData API。

從那裏例如:

var formData = new FormData(); 
formData.append("username", "Groucho"); 
formData.append("accountnum", 123456); 

var request = new XMLHttpRequest(); 
request.open("POST", "http://foo.com/submitform.php"); 
request.send(formData);