jQuery.post(),PHP和重定向

时间:2010-07-01 19:00:00

标签: php jquery ajax codeigniter post

这个问题现在已经解决了。感谢所有回复的人。

您好,

我正在尝试解决一个我可能从错误的方向接近的问题,所以也许有人可以提出更好的解决方案。

我正在为工作编写一个小型Web应用程序,它具有搜索功能。当用户提交搜索字符串时,表单将发布到CodeIgniter控制器。如果搜索返回结果,则CodeIgniter会加载包含结果的页面。如果没有结果,则只会重新加载用户的当前页面,而不会显示搜索未返回任何结果。所以,这根本不是用户友好的,我决定在$.ajax()的帮助下重新做到这一点。

这很容易,但是如果搜索成功的话,现在我不知道如何处理我收到的数据。 我知道$.load()可以替换页面的一部分,但我需要将用户重定向到完全不同的页面,同时POST数据 我的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()将其发回给同一个控制器,然后控制器获取数据并加载正确的视图文件。唯一的缺点是它仍然是相同的URL,它打破了一些小东西,但我可以处理...

$('#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();

但有两个警告。

    需要
  1. appendTo($("body"))才能在Firefox中正确提交表单。

  2. POST在第一个空格后切断了我的JSON字符串,所以我不得不在php中使用str_replace()来修复它。

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

  3. 这个问题现在已经解决了。感谢所有回复的人。

4 个答案:

答案 0 :(得分:1)

  

我正在为工作编写一个小型Web应用程序,它具有搜索功能。当用户提交搜索字符串时,表单将发布到CodeIgniter控制器。如果搜索返回结果,则CodeIgniter会加载包含结果的页面。如果没有结果,则只会重新加载用户的当前页面,而不会显示搜索未返回任何结果。

我认为您应该修复这种不良行为,并让“搜索”操作返回包含一些错误信息的页面。如果你想完全重新加载页面,使用AJAX对你没有任何好处。

答案 1 :(得分:0)

如果要将用户重定向到另一个页面,为什么要停止在javascript中执行表单?

答案 2 :(得分: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 {
               //
               //  
               //
             }
});

答案 3 :(得分:0)

这已经解决了。解决方案在我原来的帖子中。