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

标签 php javascript ajax noscript

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

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

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

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

最佳答案

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

Would I just have the search form send the user to different pages depending on their JS status?

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

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 的东西,就像很多这样的东西,如果你使用像 jQuery 这样的库会更容易。 , Prototype , YUI , Closure , 或 any of several others .例如,使用 jQuery:

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

关于php - 禁用 JavaScript 时的 Ajax 搜索解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5053669/

相关文章:

javascript - 通过单击链接将元素隐藏后重新出现(需要不包括 return false 或 preventDefault 的解决方案)

java - Wicket 6.1 AjaxEventBehavior - 如何设置延迟?

PHP CSV 到 Mysql 脚本 - 处理特殊字符

javascript - Javascript 是否有任何聪明的方法知道它在 iFrame 中执行?

php - 尝试使用 mod_rewrite 获取通用的 php/javascript 库

javascript - 使用 javascript 创建链接

php - 如何使用ajax从另一个页面加载内容

javascript - ajax 以对象作为参数调用 Controller 操作

php - 如何在运行 PHPUnit 的 NetBeans 上修复 "unrecognized option --run"

php - 多个插入查询在 phpmyadmin 中有效,但在 php 脚本中不起作用