Laravel:控制器没有远程传输我(重定向我)到页面

时间:2015-07-01 12:11:49

标签: laravel-5

来自Ajax的控制器确实获得了我想要的关键字,因为它确认了它(因为我回应它),我的想法是,在获取该关键字时,它应该重定向到我想要的页面。然而,它没有,而且,当它确实改变了语言环境时,我必须重新加载页面,否则,它将不会在页面上显示任何翻译和语言环境更改。在Firebug中,当我将鼠标悬停在POST上时,我会获得正确的URL到我想要去的地方:排序http://myweb.com/es但是控制器不会更改我网页上浏览器的http URL框到那里。 / p>

我在这里简化了控制器代码,但实际上我会希望它根据所获得的关键字转到不同的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'

));

1 个答案:

答案 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 /中设置语言环境,然后重定向回引用页面。