【问题标题】:Using Hidden Iframes to run PHP scripts - good? bad? opinions?使用隐藏的 iframe 运行 PHP 脚本 - 好吗?坏的?意见?
【发布时间】:2010-05-31 06:23:57
【问题描述】:

我对 PHP/MYSQL 领域还有些陌生,我想通过使用隐藏的 iframe 在后台运行 PHP 页面(iframe)来与我的数据库进行交互,而无需离开当前页面?

好吗?坏的?常见做法?意见?

【问题讨论】:

    标签: php mysql database events iframe


    【解决方案1】:

    大多数时候这是不好的,但有时是不可避免的。

    通常的做法是使用 AJAX,它非常普遍,甚至 W3School 都有一个关于它的 article

    使用 AJAX 优于 IFrame 的优点是 AJAX 可以是多线程的。可以连续发送多个请求,使用 IFrame 实现起来比较麻烦。此外,AJAX 支持状态代码,因此您可以检测错误,而使用 IFrame,您必须依靠抓取页面的 HTML,并希望通过查看错误页面的 HTML 代码来确定正确的状态。

    AJAX 更符合 JavaScript 习惯和事件驱动,这意味着您的回调将在有响应时自动得到通知。使用 IFrame,您必须 setTimeout() 并不断轮询 IFrame 以获取响应,这可能很容易中断。

    IFrame 有时在您想在不离开当前页面的情况下上传文件等情况下是不可避免的。但这可能不是您的范围,因为您只提到了数据库交互。

    学习使用 XMLHttpRequest,这是 AJAX 的基础。熟悉之后,尝试使用 jQuery、Dojo 等 JavaScript 框架让它变得有趣。

    【讨论】:

    • 没有必要继续使用setTimeout() 轮询iframe。您可以简单地在 iframe 中发送 JavaScript 代码,它可以在加载时执行回调。
    【解决方案2】:

    我猜当你的数据库做某事时应该会发生一些事情,对吧? IE。您的页面应该提供某种反馈,可能会更新一个数字或一些文本。

    所以无论如何你都要使用 Javascript。在这种情况下,跳过 iframe 并发送 AJAX 请求。

    【讨论】:

      【解决方案3】:

      这通常使用 AJAX 来完成。 jQuery javascript 库让这一切变得简单

      我不认为使用 iframe 是实现此目的的好方法。您仍然需要启用 javascript 来更改 iframe 的位置,如果 javascript 可用,为什么不直接使用 AJAX?

      如果您使用 iframe,如果不采取很多变通办法,您将无法以任何有意义的方式从服务器接收响应。例如 -- 使用 jQuery,您可以通过单个函数调用向服务器提交一些信息,然后当该请求完成时,可以使用来自服务器的响应信息调用回调函数:

      $.post("ajax.php", { var1: "data", var2: "moredata" },
         function(data){
           alert("Server says: " + data);
         });
      

      在本例中,当请求完成时,会出现一个警告框,输出为ajax.php

      对于 iframe,您可能会执行一些操作,例如将 iframe 的位置更改为 server.com/iframe.php?var=data&var2=moredata&var3=moredata,然后稍等片刻,然后获取 iframe 的内容(如果这甚至可能的话)并对其进行处理。

      更不用说,当您在执行此操作时遇到问题时,您可能会寻求有关 SO 的建议。每次,人们可能会说“放弃它并使用 jQuery!” :) 不妨跳过所有的痛苦和苦难,从正确的方式开始

      【讨论】:

        【解决方案4】:

        在采用 XMLHttpRequest api 之前使用了隐藏的 iframe 方法(也许你听说过它是 Ajax)。

        几年前,我使用以前的实现,使用 rslite,但现在这种技术对我来说只是一个历史价值。

        您可以在http://www.xul.fr/en-xml-ajax.html 获得有关在纯 javascript 中使用 Ajax 技术的指导,或者更好的是,您可以选择使用公共库 jquerymootools 等,以处理不同浏览器中的不同实现.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-25
          • 2011-12-29
          • 2011-02-09
          • 1970-01-01
          • 2014-04-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多