2012-02-19 54 views
1

.ajax()可以發送post請求並獲取數據,作爲返回,.load()可以獲取呈現頁面中的任何元素。如果在提交時(異步地)創建表單而不是回收一些數據,應該獲得呈現的頁面的頁面元素,如果沒有提交正常的提交,那麼會產生正常的提交?具有.ajax()和.load()混合功能的任何函數?

我不想爲xhr,正常請求單獨編寫視圖(Django)。所以,當我通過ajax提交表單時,我不想劫持默認的動作,但只想獲取呈現的提交頁面的某些元素,而不是實際被重定向到提交後的頁面,而發生的頁面本來不是xhr請求。

回答

2

更新:如果您提供要發送的數據爲對象,而不是字符串

load會做一個POST而非GET。從該文檔:

請求方法

如果數據被作爲一個對象提供使用POST方法;否則,假定爲GET。

所以:

$("#target").load("/path/to/resource selector_for_relevant_elements", {}); 

..should從GETload轉換爲POST。當然,你會用你想發送的參數替換{}


原來的答覆

您可以ajaxPOST直接做,然後處理返回的HTML自己。例如,爲了把這個load

$("#target").load("/path/to/resource selector_for_relevant_elements"); 

..into一個POST

$.ajax({ 
    url: "/path/to/resource", 
    method: "POST", 
    dataType: "html", 
    success: function(html) { 
     // Build the elemnts of the result in a disconnected document 
     var page = $("<div>").append(html); // See note below 

     // Find the relevant elements and put them in target 
     $("#target").html(page.find("selector_for_relevant_elements")); 
    } 
}); 

我已經做了包裝div,因爲這是jQuery的load函數所做的事情。你可能想看看source for load(當然這個行號會壞掉,但是文件名不可能改變)看看是否還有其他的技巧需要複製。

+0

Thanks.That解決了一個問題,另一個問題是如何讓提交按鈕執行其默認操作並將呈現頁面的元素轉換到現有頁面中,而無需轉到該頁面。 – 2012-02-19 12:42:04

+0

似乎這是不可能與js。 – 2012-02-19 12:42:54

+1

@KamalReddy:如果您允許默認操作,您的頁面將被*結果替換*。但使用表單的值創建對象很容易。從一個空白對象開始,然後以文檔順序遍歷表單字段,跳過任何「禁用」對象,並使用每個字段的名稱及其值添加道具到對象。只有包含複選框或單選按鈕(如果它們已被選中)。如果您看到之前見過的字段名稱(因此該屬性已經設置),請將屬性值轉換爲數組並將新值推送到數組上。 '文件'字段是唯一真正的問題。 – 2012-02-19 12:53:46