這個問題現在已解決。感謝所有回覆的人。jQuery.post(),PHP和重定向
你好,
我試圖解決我可能已經從錯誤的方向接近,所以也許有人會提出一個更好的解決方案的問題。
我正在寫一個小型的網絡應用程序的工作,它具有搜索功能。當用戶提交一個搜索字符串時,表單會被髮送到一個CodeIgniter控制器。如果搜索返回結果,CodeIgniter會加載一個包含結果的頁面。如果沒有結果,則用戶的當前頁面會重新加載,而不會顯示搜索沒有返回任何結果。所以,這不是用戶友好的,我決定在$.ajax()
的幫助下重新做到這一點。
這很容易,但現在我試圖弄清楚如果搜索成功,我要如何處理收到的數據。 我知道$.load()
可以替換頁面的一部分,但我需要將用戶重定向到一個完全不同的頁面,同時發佈數據 我的ajax搜索剛剛返回。從PHP返回的數據格式爲json_encode()
。
注意:$.jGrowl()
是一個jQuery插件,顯示類似Growl的消息。
$("#alias_s").submit(function() {
event.preventDefault();
var term = $('input#alias_search').val();
$.post("<?=base_url()?>aliases/searchAliases", {
searchTerm: term },
function(data) {
if(!data) {
$.jGrowl("Search for '" + term + "' returned no results", { life: 5000 });;
} else {
//
// How do i post this data to another page and redirect a user there?
//
}
});
更新:我設法找到一個解決這個問題。
我把從$.post()
返回的數據和使用$.load()
的POST數據返回到同一個控制器,該控制器依次獲取數據並加載正確的視圖文件。唯一的缺點是,它的網址仍然是相同的,它打破夫婦的小東西,但我可以處理這個...
$('#content').load("<?=base_url()?>aliases", { searchData: data});
更新#2:我終於做到了工作就像我想要的。我所做的是以JSON格式從PHP返回的數據,將其發回到同一個控制器,並讓CodeIgniter負責加載視圖,這樣,所有依賴於URL的東西都可以工作。
$('<form action="CONTROLLER" method="post"><input type="hidden" id="searchData" name="searchData" value='+data+'></form>').appendTo($("body")).submit();
雖然有2個注意事項。
appendTo($("body"))
需要使它在Firefox中正確提交表單。POST在第一個空格後切斷了我的JSON字符串,所以我不得不在PHP中使用
str_replace()
做修復。echo str_replace('','%20',json_encode($ search_results));
現在已經解決了這個問題。感謝所有回覆的人。
同意...只是使用的一種形式,如果你想重定向 – bschaeffer 2010-07-01 19:16:25
的事情是,我不希望他們重定向到一個頁面只是說,沒有結果發現,和整個應用程序的所有網頁是完全不同的,所以對他們沒有統一的位置顯示一個消息,所以出於一致性的緣故,我想我會使用類似jGrowl插件,因爲我已經將它用於其他幾件事 – solefald 2010-07-01 19:16:33
那麼問題是,你可以*或者*做一個AJAX風格的請求*或*一個常規的「POST」請求;你不能告訴瀏覽器你在半途中改變了主意。如果您不想要「搜索失敗」頁面,那麼您必須找到一種方法將搜索結果放入原始頁面。 – Pointy 2010-07-01 19:19:39