Php 处理Ajax重定向并将内容加载到新页面

Php 处理Ajax重定向并将内容加载到新页面,php,jquery,ajax,Php,Jquery,Ajax,我正在使用Ajax动态更新数据表,而无需刷新。到目前为止我没有问题。用户从表单中选择某些条件。问题是,我不想再将内容提取到同一个页面,但我想重定向并加载另一个模板上的内容: 用户选择(Page1.html)->Ajax->重定向到Page2.html->加载Page2内的数据 请有人看一下下面的代码,并说明为什么它不起作用?我可以重定向,但没有返回任何数据 Ajax if (t && e ) { dataArray = new Array; dataArray[0

我正在使用Ajax动态更新数据表,而无需刷新。到目前为止我没有问题。用户从表单中选择某些条件。问题是,我不想再将内容提取到同一个页面,但我想重定向并加载另一个模板上的内容: 用户选择(Page1.html)->Ajax->重定向到Page2.html->加载Page2内的数据

请有人看一下下面的代码,并说明为什么它不起作用?我可以重定向,但没有返回任何数据

Ajax

if (t && e ) {
    dataArray = new Array;
    dataArray[0] = e;
    dataArray[1] = t;

 $.ajax({
   type: "POST",
   url: "includes/filter.php",
   data: {
       Name: e,
       Color: t,
          },

        success: function (e) {           

        window.location.href = 'Page2.html';  // Redirect to this page
        $("#Wrapper").html(e);    // Load content to this page in Div # Wrapper

        // If I Uncomment the two lines above and just add $("#table").html(e); it will successfully load content within the table div on the same page

        }
    });
  }
其中filter.php处理服务器端查询并输出包含数据的html表。 谢谢

试试这个:

使用POST将请求发送到页面后。把这一行加进去 page2.html$(“#包装器”).html(e)


我建议你明确选择你的道路:

  • 选项1:删除ajax请求,打开一个新窗口

    window.open('Page2.html?filter=yabayaba')

  • 选项2:使用ajax请求,并在对话框中加载结果(使用引导或jquery ui)

    success:function(e){$(e).dialog();}


    • 这里有一些地方不对劲

    • window.location.href='Page2.html'时执行它停止其余代码的执行并重定向浏览器

    • $(“#包装器”).html(e)位于AJAX成功函数中。所以
      只有在AJAX调用之后才会触发。当新页面加载时
      此代码未执行。(由于前面的重定向,它无论如何都不会启动)

    • AJAX的全部目的是不重定向用户。如果你还是要重定向它们,那么为什么不在Page2.html中加载正确的内容,而不是用javascript插入它呢

      或者,您可以删除重定向,只需使用AJAX请求将整个Page2.html文件加载到当前页面,而不是原始模板

      我不知道你的HTML是什么样子,但是如果Page2.HTML有一个名为#wrapper的div,那么你需要做的就是将Page2.HTML的#wrapper内部的所有内容加载到Page1.HTML的#wrapper中,如下所示:

      $('#wrapper').load('Page2.html #wrapper');
      

      这段代码应该放在AJAX成功函数中,而不是重定向。您可以查看有关.load()的更多信息。

      将e和t传递到下一页,如

      window.location.href = 'Page2.html?e=' + e + '&t=' + t;
      
      加载page2后,获取e和t并进行ajax调用并替换包装器的html。在当前解决方案中,在替换包装器html之前加载page2

      用于从数组创建查询字符串:

      var array = [],
      array["Name"] = "Car";
      array["Color"] = "Red";
      var queryStr = "";
      
      for (var key in array){
        if(queryStr != "") queryStr += "&";
        queryStr += key + "=" + array[key];
      }
      
      var url = "Page2.html?" + queryStr;
      

      嗯..一旦它到达
      window.location.href
      ,它就会重定向到该页面,并且没有数据随它一起传递。为什么不使用重定向,使用查询获取该页面上的数据?我不能在第2页上有一个静态内容,它只是一个样式化的页面,我想用它来显示表格数据,我想尝试第二种方法,加载整个page2.html,你能告诉我怎么做吗$(body.load('page2.html')->在#Wrapper中的page2内返回(e)?是的,这或多或少就是你可以做到的。请参阅我的更新答案:)它只返回地址栏中的结果,不加载第2页中的内容,如下面所述。感谢使用post方法获得结果如果(isset($U post['data']){data=$U post['data'];$).html($data)}谢谢,我似乎有点进展了,只是简单地说,有一个值为e+t+n+r的数组,而不是传递'Page2.html?e='+e+'&t='+t+'&n='+r='+r;如何循环遍历数组dataArray并发布已设置的键?用户可从4个ect中选择2个。。如上面所述发布4将在URL page2.html?Name=car&color=red,,(空冒号)中输出,从数组创建查询字符串应该不是问题。我不知道你的数组是如何构造的,但是你可以循环它并开始将键值附加到你的URL字符串中。我知道这是一个不同的主题,但是如果你能告诉我如何循环数组并将存在的键值附加到URL中的任何教程,我会怎么做?我将不胜感激。感谢againI更新了我的解决方案,包括从数组创建查询字符串的代码。
      var array = [],
      array["Name"] = "Car";
      array["Color"] = "Red";
      var queryStr = "";
      
      for (var key in array){
        if(queryStr != "") queryStr += "&";
        queryStr += key + "=" + array[key];
      }
      
      var url = "Page2.html?" + queryStr;