【问题标题】:Ajax search workaround when JavaScript is disabled禁用 JavaScript 时的 Ajax 搜索解决方法
【发布时间】:2011-02-19 21:31:58
【问题描述】:

我的网站上有一个搜索页面。搜索从外部来源的几个(最终是几个)API 中提取。有时搜索可能需要长达 5 秒的时间。 正因为如此,我想至少用加载 gif 加载我的搜索页面,并让 AJAX 开始拉数据,一次显示一点。 (类似于http://gamespot.com,虽然这是一个不好的例子,因为在禁用 JS 的情况下搜索不起作用)

当然,我必须考虑关闭 Javascript 的用户,所以对于他们来说,我只需要让 PHP 进行搜索,他们将不得不忍受等待。

实现这一点的最佳方法是什么?如果我使用<noscript>,那么所有用户仍然需要等待 5 秒的 PHP 部分加载。

我是否可以让搜索表单根据用户的 JS 状态将其发送到不同的页面?

【问题讨论】:

    标签: php javascript ajax noscript


    【解决方案1】:

    也许 noscript 部分定义了一个 iframe 来加载长期 PHP 查询的结果?

    我是否可以让搜索表单根据用户的 JS 状态将其发送到不同的页面?

    如果您有用户访问您的页面,然后发送表单,那绝对是最好的方法。例如:

    HTML:

    <form id='theForm' action='long_search.php'>
    ....
    

    JavaScript:

    hookEvent(document.getElementById('theForm'), 'submit', function(event) {
        event.preventDefault();
        loadAjaxSearchResults();
        return false;
    });
    

    ...其中hookEvent 是一个使用addEventListenerattachEvent(在IE 上)的函数。


    题外话hookEvent 的东西,就像很多这样的东西,如果你使用像 jQueryPrototypeYUIClosure 这样的库会更容易,或any of several others。例如,使用 jQuery:

    $("#theForm").submit(function() {
        $("#resultsTarget").load("ajaxsearch.php", $(this).serialize());
        return false;
    });
    

    【讨论】:

    • 我一直觉得 iframe 并不理想。我会接受第二个建议。
    【解决方案2】:

    如果没有 JavaScript,您将需要将数据发布到服务器并在页面上执行完整的回发(刷新)。就像过去的美好时光一样。 ;)

    【讨论】:

      【解决方案3】:

      不,您将您的 js 代码(如果我理解正确,则自动完成?)应用到输入字段。把 Javascript 想象成一个扩展器。如果禁用 js,则不会在输入字段上扩展自动完成功能。你可以在你说的地方放一些文本,伙计,打开 js,否则这将是一个漫长的搜索。并且如果js开启,隐藏文字

      【讨论】:

        【解决方案4】:

        渐进增强:

        首先构建它,以便 PHP 版本可以正常工作。这是所有人都可以访问的。然后,添加 javascript,如果可用,它会在后台执行 ajax 请求以获取内容并更新当前页面。

        将此书视为有关该主题的简单而出色的读物: Bullet Proof Ajax

        【讨论】:

          猜你喜欢
          • 2017-03-31
          • 2012-02-20
          • 2017-01-08
          • 1970-01-01
          • 2011-02-07
          • 1970-01-01
          • 2010-09-23
          • 2023-03-13
          • 1970-01-01
          相关资源
          最近更新 更多