这个问题现在已经解决了。感谢所有回复的人。
您好,
我正在尝试解决一个我可能从错误的方向接近的问题,所以也许有人可以提出更好的解决方案。
我正在为工作编写一个小型Web应用程序,它具有搜索功能。当用户提交搜索字符串时,表单将发布到CodeIgniter控制器。如果搜索返回结果,则CodeIgniter会加载包含结果的页面。如果没有结果,则只会重新加载用户的当前页面,而不会显示搜索未返回任何结果。所以,这根本不是用户友好的,我决定在$.ajax()
的帮助下重新做到这一点。
这很容易,但是如果搜索成功的话,现在我不知道如何处理我收到的数据。
我知道$.load()
可以替换页面的一部分,但我需要将用户重定向到完全不同的页面,同时POST数据
我的ajax搜索刚刚返回。从PHP返回的数据采用json_encode()
格式。
注意: $.jGrowl()
是一个jQuery插件,可以显示类似Growl的消息。
$("#alias_s").submit(function() {
event.preventDefault();
var term = $('input#alias_search').val();
$.post("<?=base_url()?>aliases/searchAliases", {
searchTerm: term },
function(data) {
if(!data) {
$.jGrowl("Search for '" + term + "' returned no results", { life: 5000 });;
} else {
//
// How do i post this data to another page and redirect a user there?
//
}
});
更新:我设法找到解决此问题的方法。
我获取从$.post()
返回的数据并使用$.load()
将其发回给同一个控制器,然后控制器获取数据并加载正确的视图文件。唯一的缺点是它仍然是相同的URL,它打破了一些小东西,但我可以处理...
$('#content').load("<?=base_url()?>aliases", { searchData: data});
更新#2:我终于让它像我想要的那样工作。我所做的是从JSON格式的PHP返回数据,将其发送回同一个控制器,让CodeIgniter负责加载视图,这样我所有依赖URL的东西都可以工作。
$('<form action="CONTROLLER" method="post"><input type="hidden" id="searchData" name="searchData" value='+data+'></form>').appendTo($("body")).submit();
但有两个警告。
appendTo($("body"))
才能在Firefox中正确提交表单。
POST在第一个空格后切断了我的JSON字符串,所以我不得不在php中使用str_replace()
来修复它。
echo str_replace('','%20',json_encode($ search_results));
这个问题现在已经解决了。感谢所有回复的人。
答案 0 :(得分:1)
我正在为工作编写一个小型Web应用程序,它具有搜索功能。当用户提交搜索字符串时,表单将发布到CodeIgniter控制器。如果搜索返回结果,则CodeIgniter会加载包含结果的页面。如果没有结果,则只会重新加载用户的当前页面,而不会显示搜索未返回任何结果。
我认为您应该修复这种不良行为,并让“搜索”操作返回包含一些错误信息的页面。如果你想完全重新加载页面,使用AJAX对你没有任何好处。
答案 1 :(得分:0)
如果要将用户重定向到另一个页面,为什么要停止在javascript中执行表单?
答案 2 :(得分:0)
也许这项工作,但我没有经过测试。
$("#alias_s").submit(function() {
var term = $('input#alias_search').val();
$.post("<?=base_url()?>aliases/searchAliases", {
searchTerm: term },
function(data) {
if(!data) {
$.jGrowl("Search for '" + term + "' returned no results", { life: 5000 });;
return false;
} else {
//
//
//
}
});
答案 3 :(得分:0)
这已经解决了。解决方案在我原来的帖子中。