我在这里简化了控制器代码,但实际上我会希望它根据所获得的关键字转到不同的URL,我会用switch语句执行某些操作,或者如果等等则使用IF。
所以控制器就像这样简单:
public function changelanguage()
{
$lang = \Input::get('locale');
echo "I got $lang";
Session::put('locale', $lang);
return redirect('/es');
}
如果不是使用ajax我使用Form,那么我不需要重新加载,表单的Action使控制器更改语言环境并翻译页面而不重新加载。但我需要使用ajax,在任何情况下,控制器都能正确获取语言的关键字('en','es','de'等),所以它应该从那里获取它并将我重定向到URL页面,但它只是不动。
如果你对Ajax感到好奇,就在这里,但它确实发送了我所说的关键字。
$(document).ready(function(){
$('.choose-language').on('click', function(e){
e.preventDefault();
var selectedlanguage = $(this).data('value');
$.ajax({ // so I want to send it to the controller
type:"POST", // via post
url: 'language',
data:{'locale': selectedlanguage},
}); // HERE FINISHES THE $.POST STUFF
}); //HERE FINISHES THE CLICK FUNCTION
}); // HERE FINISHES THE CODE
路线
Route::post('language', array(
'as' =>'language',
'uses' => 'LanguageController@changelanguage'
));
答案 0 :(得分:0)
如果您尝试在AJAX请求的脚本中执行重定向,那么它将无法正常工作。你不能通过AJAX从脚本请求重定向,否则人们会做各种邪恶的重定向。
相反,在您的AJAX请求上设置一个“成功”处理程序,如果请求成功,则会刷新您的页面。它可以很简单:
var url = '/language';
var data = {
locale: $(this).data('value');
};
var request = $.post(url, data)
.success(function (response) {
// Script was successful; reload page
location.reload();
});
我不确定你是如何允许用户选择语言环境的,但是因为你需要重新加载任何方式我觉得AJAX在这里毫无意义。只需要一个传统的表单,将新的语言环境提交给一个动作,在一个session / cookie /中设置语言环境,然后重定向回引用页面。