2010-07-01 47 views
0

這個問題現在已解決。感謝所有回覆的人。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個注意事項。

  1. appendTo($("body"))需要使它在Firefox中正確提交表單。

  2. POST在第一個空格後切斷了我的JSON字符串,所以我不得不在PHP中使用str_replace()做修復。

    echo str_replace('','%20',json_encode($ search_results));

現在已經解決了這個問題。感謝所有回覆的人。

回答

0

這已經解決了。解決方案在我原來的文章中。

1

我正在寫一個小型的網絡應用程序的工作,有搜索功能。當用戶提交一個搜索字符串時,表單會被髮送到一個CodeIgniter控制器。如果搜索返回結果,CodeIgniter會加載一個包含結果的頁面。如果沒有結果,則用戶的當前頁面會重新加載,而不會顯示搜索沒有返回任何結果。

我認爲你應該修復那個不好的行爲,並讓「搜索」操作返回帶有一些錯誤信息的頁面。無論如何,如果你想完全重新加載頁面,使用AJAX並沒有什麼好處。

+0

同意...只是使用的一種形式,如果你想重定向 – bschaeffer 2010-07-01 19:16:25

+0

的事情是,我不希望他們重定向到一個頁面只是說,沒有結果發現,和整個應用程序的所有網頁是完全不同的,所以對他們沒有統一的位置顯示一個消息,所以出於一致性的緣故,我想我會使用類似jGrowl插件,因爲我已經將它用於其他幾件事 – solefald 2010-07-01 19:16:33

+1

那麼問題是,你可以*或者*做一個AJAX風格的請求*或*一個常規的「POST」請求;你不能告訴瀏覽器你在半途中改變了主意。如果您不想要「搜索失敗」頁面,那麼您必須找到一種方法將搜索結果放入原始頁面。 – Pointy 2010-07-01 19:19:39

0

如果你想將用戶重定向另一個頁面,你爲什麼要停止執行在JavaScript形式?

+0

你的意思是'event.preventDefault();'? 因爲沒有它,功能不工作鉻作爲事件過度寫入功能,我結束了空結果從功能 – solefald 2010-07-01 20:18:58

0

也許這個工作,但我沒有測試過。

$("#alias_s").submit(function() { 


    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 });; 
       return false; 
      } else { 
       // 
       // 
       // 
      } 
}); 
+0

我覺得你的問題誤解返回。 'preventDefault()'與我的問題沒有任何關係,事實上,它使我的函數起作用。我在試圖弄清楚如何處理數據時遇到了問題,但發現了一個效果很好的解決方案。 – solefald 2010-07-02 21:32:09