我的网站上有搜索页面。搜索来自外部源的一对(最终几个)API。有时搜索最多可能需要5秒钟。 因此,我想加载我的搜索页面至少使用加载gif,让AJAX开始提取数据,一次显示一点。 (类似于http://gamespot.com,虽然这是一个不好的例子,因为搜索不适用于JS禁用)
当然我必须考虑关闭Javascript的用户,所以对于他们我只是让PHP进行搜索,他们将不得不忍受等待。
实现此目的的最佳方法是什么?如果我使用<noscript>
,那么所有用户仍然必须等待5秒的PHP部分加载。
我是否只是将搜索表单发送给不同的页面,具体取决于他们的JS状态?
答案 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
是使用addEventListener
或attachEvent
(在IE上)的函数。
偏离主题:如果您使用jQuery,Prototype等YUI这样的库,hookEvent
就像很多这样的东西一样容易{3}},Closure或any 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