禁用JavaScript时的Ajax搜索解决方法

时间:2011-02-19 21:31:58

标签: php javascript ajax noscript

我的网站上有搜索页面。搜索来自外部源的一对(最终几个)API。有时搜索最多可能需要5秒钟。 因此,我想加载我的搜索页面至少使用加载gif,让AJAX开始提取数据,一次显示一点。 (类似于http://gamespot.com,虽然这是一个不好的例子,因为搜索不适用于JS禁用)

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

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

我是否只是将搜索表单发送给不同的页面,具体取决于他们的JS状态?

4 个答案:

答案 0 :(得分:1)

也许让noscript部分定义iframe来加载长时间PHP查询的结果?

  

我是否只是将搜索表单发送给不同的页面,具体取决于他们的JS状态?

如果您有用户访问您的网页,然后发送表单,这绝对是最好的方式。 E.g:

HTML:

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

JavaScript的:

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

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


偏离主题:如果您使用jQueryPrototypeYUI这样的库,hookEvent就像很多这样的东西一样容易{3}},Closureany of several others。例如,使用jQuery:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

不是你应用你的js代码(自动完成,如果我没有权利?)直到输入字段。把Javascript想象成扩展器。如果禁用js,则不会在输入字段上扩展自动完成。你可以放一些文字,你说,伙计,打开js,否则这将是一个长期的搜索。如果js打开,则隐藏文本

答案 3 :(得分:0)

渐进增强:

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

将这本书看作是关于这个主题的简单,精彩的读物: Bullet Proof Ajax