2011-12-26 40 views
12

Có cách nào để gửi dữ liệu bài đăng đến một tập lệnh php khác ngoài việc có biểu mẫu không? (Không sử dụng GET tất nhiên).Gửi dữ liệu POST tới PHP mà không cần sử dụng biểu mẫu HTML?

Tôi muốn javascript tải lại trang sau X giây và đăng một số dữ liệu lên trang cùng một lúc. Tôi có thể làm điều đó với GET nhưng tôi thà sử dụng POST, vì nó trông sạch hơn.

Cảm ơn rất nhiều.

EDIT: Có thể thực hiện với tiêu đề PHP không? Tôi chắc chắn rằng nó là tốt hơn để sử dụng JQuery nhưng đối với tình hình hiện tại của tôi, tôi có thể thực hiện điều đó dễ dàng hơn nhiều/nhanh hơn:)

Cheers

tôi đã kết thúc làm việc đó như vậy:

<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> 

Dường như làm việc tốt cho tôi, nhưng hãy nói nếu có bất cứ điều gì sai trái với nó!

Cảm ơn mọi người.

+0

Bạn có thể, nếu bạn muốn tránh sử dụng hình thức AJAX, đã ẩn, hoặc tạo ra một động, và chỉ cần đưa ra các hình thức sử dụng Javascript sau một thời gian chờ. AJAX có thể là giải pháp tốt nhất, nó phụ thuộc chính xác những gì bạn muốn làm, và AJAX cho là cung cấp cho bạn nhiều phạm vi hơn để xử lý lỗi một cách duyên dáng. – DaveRandom

+0

Ah có âm thanh có thể cho tôi, tôi chắc chắn rằng các đề xuất khác là tốt hơn tổng thể nhưng đây là một dự án nhỏ và giải pháp này có vẻ như nó phù hợp với phong cách của tôi về mã hóa :) –

+0

Xem câu trả lời của tôi dưới đây để biết chi tiết được thực hiện trong Javascript không có khung. – DaveRandom

Trả lời

18

Theo yêu cầu trên, đây là cách bạn có thể thêm động một biểu mẫu ẩn và gửi nó khi bạn muốn làm mới trang.

Một nơi nào đó trong HTML của bạn:

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

Và một số 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(); 
} 

này tương đương với điền vào mẫu này 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

Tôi đã đăng những gì tôi đã sử dụng trong câu hỏi cuối cùng/OP (Không chắc chắn những gì bạn gọi nó ở đây) –

5

Bạn có thể sử dụng JQuery để gửi đến một trang php: http://api.jquery.com/jQuery.post/

+0

Có vẻ như tôi cần học Ajax và JQuery để tiến lên ... Rất nhiều thứ tôi đã cố gắng làm có vẻ như nó có thể được thực hiện dễ dàng hơn với họ. Tuy nhiên tôi chưa bao giờ chạm vào một trong hai vì vậy trong ngắn hạn tôi không thể thực sự sử dụng nó (Cho đến khi tôi tìm hiểu về JQuery). Cảm ơn rất nhiều. –

1

Bạn có thể gửi một yêu cầu XHR với dữ liệu bạn muốn gửi trước khi tải lại trang.

Và chỉ tải lại trang nếu yêu cầu xhr hoàn tất.

Vì vậy, về cơ bản bạn sẽ muốn thực hiện yêu cầu đồng bộ.

2

By 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 
}) 

hoặc đơn giản nhất:

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

thêm về http://api.jquery.com/jQuery.ajax

2

Mẫu tiêu đề của riêng mình, như vậy:

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

Làm thế nào về điều này:

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); 
} 

sử dụng như thế này:

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

Sử dụng FormData API.

Từ ví dụ đó:

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); 
Các vấn đề liên quan