【问题标题】:Handle Ajax redirect and load content into new page处理 Ajax 重定向并将内容加载到新页面
【发布时间】:2014-01-27 08:21:39
【问题描述】:

我正在使用 Ajax 来动态更新数据表而不刷新。到目前为止我没有问题。用户从 Form 中选择某些标准。问题是,我不再想将内容提取到同一页面,但我想重定向并在不同的模板上加载内容:

用户选择 (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 表。 谢谢

【问题讨论】:

  • 嗯..一旦到达window.location.href,它就会重定向到该页面,并且没有数据随之传递。为什么不在重定向时,使用查询来获取该页面上的数据?

标签: php jquery ajax


【解决方案1】:

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

window.location.href = 'Page2.html?e=' + e + '&t=' + t;

一旦 page2 被加载,获取 e 和 t 并进行 ajax 调用并替换包装器的 html。在您当前的解决方案中,page2 在包装器 html 被替换之前加载。

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

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;

【讨论】:

  • 谢谢,我似乎到了某个地方,只是一个快速的,说有一个值为 e + t + n + r 的数组,而不是传递 'Page2.html?e=' + e + ' &t=' + t + '&n=' + n + '&r=' + r;我将如何遍历数组 dataArray 并发布设置的键?由于用户可以选择 2 出 4 等.. 并且如上发布 4 将在 URL 中输出 page2.html?Name=car&color=red,,(空冒号)
  • 从数组创建查询字符串应该不是问题。我不确定您的数组的结构,但您可以循环它并开始将键值附加到您的 URL 字符串
  • 我知道这是一个不同的主题,但如果你能指出任何关于如何循环遍历数组并将存在的键/值附加到 url 的教程?我会很感激。再次感谢
  • 我已经更新了我的解决方案以包含用于从数组创建查询字符串的代码。
【解决方案2】:

试试这个:

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 (data) {           

            window.location.href = 'Page2.html?data='+data ;  // Redirect to this page


            }
        });
      }

使用 POST 将请求发送到页面后。并将这一行添加到 page2.html $("#Wrapper").html(e);

【讨论】:

  • 它只是在地址栏中返回结果,不加载page2中的内容,如下Jd所述。谢谢
  • 然后使用 post 方法获取结果 if(isset($_POST['data'])) { $data = $_POST['data']; $("#Wrapper").html($data); }
【解决方案3】:

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

  • 选项 1:放弃 ajax 请求,然后打开一个新窗口

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

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

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

【讨论】:

    【解决方案4】:

    这里有一些问题。

    1. window.location.href = 'Page2.html'; 执行时,它会停止执行其余代码并重定向浏览器。

    2. $("#Wrapper").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() here.

    【讨论】:

    • 我不能在page2上有静态内容,它只是一个样式页面我想用它来显示表格数据,我想试试第二种方法,加载整个page2.html ,请您告诉我怎么做? $(body).load('page2.html')-> 在#Wrapper 中的 page2 内返回 (e) ?
    • 是的,这或多或少是你可以做到的。查看我的更新答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多