【问题标题】:how to save results from ajax queries between pages如何保存页面之间ajax查询的结果
【发布时间】:2014-12-15 16:42:33
【问题描述】:

背景信息

我有一个包含搜索页面的网络应用程序。此搜索提供了 3 个通过 ajax 填充的不同下拉框。 首次加载页面时,框 1 会填充默认位置列表。 当用户选择一个位置时,第二个下拉菜单会出现在同一页面上,并通过 ajax 填充所选位置内的建筑物。 选择建筑物后,会出现一个带有房间列表的最终下拉框。 一旦用户选择了一个房间,该页面就会显示有关该房间的详细信息,并且用户可以深入了解其中一个房间属性——这会将他们带到一个新页面。

问题描述

当用户完成查看房间详细信息网页并点击“返回”按钮时,我希望能够向他们显示他们上次离开的位置......这是包含他们之前所有选择的搜索页面带领他们进入房间细节。目前,当他们点击后退按钮时,默认搜索页面会加载并且他们之前的选择会消失。

保留搜索请求详细信息的最佳方式是什么? 我正在考虑向 URL 添加值……就像查询字符串一样。现在,URL 当然不会改变,因为搜索页面的一切都是通过 ajax / javascript 完成的。 但除了这个选项之外,我想知道是否有另一种想法/方法来完成同样的事情。

该解决方案必须适用于所有浏览器,包括 IE、Chrome、FFox、Safari。

代码

更改下拉菜单中的值时触发的 ajax 代码:

 $('#Locations').live('change',function(){
    $.ajax({
        url:"<?php echo site_url('mycontroller/getbuildings/');?>" + "/" + $selectedvalue,
        type:'GET',
        dataType:'json',
        success: function(returnDataFromController) {

             logic to populate building drop down
        }


 $('#buiding_Locations').live('change',function(){
     $('#room_locations').html('');
     $('#search').hide();
      var htmlstring;
      $selectedvaluebranch_ = $('#Locations').val();
      $selectedvaluebuiding_ = $('#buiding_Locations').val();

      $.ajax({
                url:"<?php echo site_url('mycontroller/getrooms');?>" + "/" + $selectedvaluebuiding_,
                type:'GET',
                dataType:'json',
                success: function(returnDataFromController) {
                    logic to populate room list
                }

在填充位置下拉列表的方法中,(mycontroller/getLocations)我添加了使用/检查会话变量的逻辑......现在当我点击后退按钮时,位置选择被保存。 “mycontroller/getLcations”方法是加载搜索页面时调用的默认方法。

但我想知道填充其他两个下拉框的最佳方法。如您所见,仅当用户更改“父”下拉框的值时才会填充它们。

也许我需要在我的控制器中创建另一个方法来查询所有 3 个框......并将所有数据发送到前端,而不是我现在这样做的方式......通过 3 个单独的调用3种不同的方法。 然后我需要将填充各个下拉框的逻辑从它们现在所在的位置移到一个可重复使用的函数中,该函数可以在用户进行新选择或我尝试使用时调用会话变量中的搜索数据。

如果有更简单的方法,请告诉我。我只是想确保我没有不必要地编写额外的代码/我正在正确重构。

【问题讨论】:

    标签: javascript php ajax codeigniter search


    【解决方案1】:

    您可以在每次 AJAX 调用以加载新的下拉菜单时,存储一个会话变量来指示下拉菜单的状态。然后,只需获取这些结果以显示您之前选择的内容。


    编辑:

    你正在做的事情似乎很好。一些使它变得更好的建议:

    • 您可以通过创建一个 javascript 变量(如var mainURL = &lt;?=site_url() ?&gt;;)来摆脱 jQuery 中的 PHP 标记。这将允许您将函数放在可以缓存的文件中,因此您可以更好地分离 JS /PHP。
    • 为了获得更大的灵活性,考虑使用 POST 而不是 GET 怎么样?这可以允许添加一个变量来说明正在选择哪个表单,并在返回的数据中添加一个变量来指示要填充的字段:因此,您只需要一个 $.ajax 实例。

    例如:

    function updateForms(type,value){
     $.ajax({
          url:mainURL+"/mycontroller/getdata",
          type:"POST",
          data:{
                dropdownSelected:type,
                value:value
          },
          success:function(returnData){
                populate(returnData.form);
          });
    

    【讨论】:

    • 对建议加 1:会话。请在我在帖子中创建的新“代码”部分下查看我的 cmets。
    • @dot 我在帖子中为您的代码添加了一些 cmets!
    【解决方案2】:

    可能最好的方法是使用 php 会话变量来存储用户搜索的最后一个值。

    查看http://www.sitepoint.com/php-sessions/ 了解如何使用它们的一个很好的例子。

    编辑

    如果某事物依赖于另一个事物,而另一个事物又依赖于另一个事物,并且您拥有最小的单位,那么您可以向后编码您的备份方式。例如,您将位置保存为会话变量,如果选择 X,则该位置只能在下拉列表中看到,如果在另一个下拉列表中选择 Y,则只能在该下拉列表中看到 X……等等。听起来像你已经有了父子关系,如果是这样,那么向后编码应该很容易。

    【讨论】:

    • 建议加 1。我在帖子的“代码”部分更新了我的问题,并提供了更多详细信息。
    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 2015-10-09
    • 2021-04-19
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多