2009-11-10 79 views
13

我知道我可以做一個徹頭徹尾的jQuery帶POST請求並將$.post()語法。然而,我很想知道是否有可能讓jQuery在整個頁面上發佈發佈請求(就像提交表單時一樣),以便加載一個全新的頁面。這可能嗎?

有一個在DOM沒有表單元素,所以我不能做form.submit()。

+0

出了什麼問題'myFormElement。提交()'?或者更好的是,當用戶點擊提交按鈕時,*讓瀏覽器提交表單*,不需要JavaScript。 – 2009-11-10 15:08:40

+0

我希望能夠在DOM中沒有表單的情況下做到這一點(就像我可以在沒有DOM中的表單的情況下執行帶外發布一樣)。但我猜不。 – UpTheCreek 2009-11-10 15:50:43

+0

你實際上沒有'

'元素?你應該在問題中提到這一點。的 – 2009-11-10 15:51:49

回答

0

不知道如果我收到了你的問題,但如果你只是想發佈之後將客戶端重定向,只需直接在客戶端在$。員額的回調函數一樣

jQuery.post(url, {}, function() { location.href = "somewhere_else.html"; }) 
+1

類 - 我的意思是,在一個正常的表單提交,後的參數發送到服務器,服務器用一個html文件,它取代了當前的響應。我想用JQuery做同樣的事情(所以只有一篇文章給服務器,不是一篇文章,然後是一個單獨的文章,因爲你的例子會產生我認爲的)。 – UpTheCreek 2009-11-10 15:03:07

+0

噢,你爲什麼不直接發佈表單(沒有javascript)到那個頁面,然後處理請求呢? :) - Marco 0秒前 – Marco 2009-11-10 15:07:51

+0

因爲沒有任何形式。 – UpTheCreek 2009-11-10 15:49:22

0

我覺得你試圖重新實現默認行爲。只需使用瀏覽器提供的常規提交機制即可。

如果您需要在將數據提交給服務器之前檢查數據,請將函數綁定到onsubmit事件並執行檢查,然後通過返回false或返回true來中斷提交操作並讓瀏覽器執行所有操作工作。你能理解這個嗎?

0

我用下面的例子中,允許多個按鈕提交序列化格式的數據,但有不同的選項,例如保存並保存&關閉。即使我使用jQuery發佈序列化數據,整個頁面都會重新加載,因爲我將ajax post響應數據發送回「document.body」。

<form id="myform"> 
<button id="button1" type="button" onclick="submitButton(true,false)" name="save" value="save">Save</button> 
<button id="button1" type="button" onclick="submitButton(true,true)" name="close" value="close">Save and Close</button> 
</form> 

function submitButton(save,close) { 
    $.ajax({url:'page.asp', data:''+$('#myform').serialize()+'&save='+save+'&close='+close+'', 
    type: 'post', 
    success: function(data){$(document.body).html(data);} 
    }); 
} 

您不需要表單元素,因爲您可以將它用於任何具有唯一標識的元素。

+0

同樣在回答評論「所以只有一個職位的服務器,而不是一個職位,然後單獨獲得」 - 這種方法實現了。 – 2011-11-22 12:23:48

21

我使用這個功能時,我需要發送數據,並沒有形式的DOM:

function postData(actionUrl, method, data) { 
    var mapForm = $('<form id="mapform" action="' + actionUrl + '" method="' + method.toLowerCase() + '"></form>'); 
    for (var key in data) { 
     if (data.hasOwnProperty(key)) { 
      mapForm.append('<input type="hidden" name="' + key + '" id="' + key + '" value="' + data[key] + '" />'); 
     } 
    } 
    $('body').append(mapForm); 
    mapForm.submit(); 
} 

我這樣稱呼它:

var data= { 'property1': 666, 'property2': 'I am a boy' }; 
postData('http://urltopostdata.to', 'post', data); 
+2

這對我有用。感謝您使用.hasOwnProperty(),以確保您使用的是酒店需要從數據對象,而不是該原型(我不得不尋找原因:http://stackoverflow.com/questions/684672/loop-through-javascript-目的) – 2013-12-13 22:13:07

相關問題