【问题标题】:Save AJAX response for other functions (e.g. global variable?)为其他函数保存 AJAX 响应(例如全局变量?)
【发布时间】:2014-01-24 02:37:17
【问题描述】:

我是 PHP、JavaScript、JQuery、JSON 和 AJAX 的新手。几周前我开始学习所有这些东西。
我的问题:
我正在创建一个显示来自数据库的数据的网站。在网站上应该可以搜索、排序和过滤数据。 现在我从 AJAX 请求中收到一个 JSON_encoded 数组,其中包含数据库中的所有数据。现在我问是否可以将来自 AJAX 请求的响应保存在全局变量中,例如,如果用户想要订购数据,我不需要再次从数据库中获取数据。 (通过使用类似 php 函数“multisort()”)
还是我必须发出一个新的查询/Ajax 请求来对查询 ORDER BY 中使用的数据进行排序?

我已经读过,由于 Ajax 的异步性,保存到全局变量不起作用。那么如何避免很多 Ajax 请求呢?还是很多 Ajax 请求是解决这个问题的常用方法?

希望您能理解我的问题。
如果你愿意,我可以附上我写的代码,但没有尝试解决这个问题,因为我想了解常见的解决方案是什么。

【问题讨论】:

  • 全局变量只要在数据写入变量后访问数据就可以工作...
  • 如果您正在谈论您希望特定用户可以使用的数据,因为她继续请求您希望将 json 数据存储在 session variables 中的页面。
  • 技术上可以将数据保存到全局变量,甚至是隐藏的输入。不过我不推荐它......一旦你在浏览器上进行了刷新,你就会失去所有的工作。此外,从数据库中重试已排序的记录实际上比在浏览器上使用 javascript 进行排序要快得多。

标签: javascript php jquery ajax json


【解决方案1】:

您可以将客户端的 ajax 响应保存在这样的全局变量中。希望对您有所帮助。

if (!window.OPT) window.OPT = {};

$.ajax({ url: '/yourURL/' }).done( 
      function(data) {
    OPT.AJAXResult = data ;
        } );

【讨论】:

    【解决方案2】:

    我认为从数据库中执行此操作更容易且效率更高。那里有 SQL 来帮助您进行过滤和排序。将其存储在变量中可能会占用服务器上太多的内存 - 只是为了存储已经在数据库中的数据

    对于用户的每个请求,向数据库发送请求并显示数据

    【讨论】:

    • 这是另一个(也是原始 ^)选项。它也可能是最常见的选择。数据库将以最快的速度优化查询(排序/过滤/限制),尽管它确实需要每次都进行另一个 AJAX 调用
    • 在我看来,进行另一个 ajax 调用很便宜 - 与必须重新加载页面的日子相比。至少你得到了最新的数据
    • 我同意。在大多数情况下,这是要走的路
    • 感谢您的快速帮助。我想我每次都会提出一个新的请求。这样做意味着我不需要发送 ajax 响应 JSON_encoded,对吗?使用 JSON 响应(在客户端创建 html 数据)有什么优势,还是在服务器端创建 html 数据更好?
    【解决方案3】:

    HTTP 是一种无状态协议。有几种方法可以做到这一点:

  • 将数据存储在服务器上。您可以使用某种会话机制并使用 cookie,以便服务器可以跟踪用户会话。在 PHP 中,您会将数据存储在 $_SESSION 变量中。
  • 将数据存储在用户计算机上。在初始请求中全部发送,并根据需要使用 javascript 进行过滤。
  • 我会根据您要处理的数据量推荐第一个选项。大量发送可能会影响某些浏览器的性能。当然,如果您还没有实施会话,那么现在您将不得不这样做。
    希望这可以帮助 :)

    【讨论】:

      【解决方案4】:

      如果您有一个用户系统,您可以将数据序列化或 json_encode 到用户会话。老实说,这取决于数据。

      【讨论】:

        猜你喜欢
        • 2018-06-03
        • 2021-09-04
        • 1970-01-01
        • 1970-01-01
        • 2020-03-22
        • 1970-01-01
        • 1970-01-01
        • 2014-11-09
        • 1970-01-01
        相关资源
        最近更新 更多