【问题标题】:Routing is not working in laravel5 when call made from ajax to controller从 ajax 到控制器的调用时,路由在 laravel5 中不起作用
【发布时间】:2016-05-08 04:41:47
【问题描述】:

我在登录页面的点击事件上调用 jquery 函数。从那里我调用 $ajax 函数。这个 $ajax 函数应该调用控制器并处理函数并返回响应。我已经使用 routes.php 连接了它。在运行应用程序时,我收到“未找到请求的页面 404 错误”的错误。我认为路由有问题。有人帮我解决这个问题。提前致谢。

routes.php如下

Route::post('signin', 'LoginController@signin'); 

点击事件的jQuery函数在login_register.js文件中

$("#form-login").on("submit",function(e){
    e.preventDefault();
    var log_password = "";
    var log_name = $("#log_username").val();
    var password = $("#log_password").val();

    if(password.trim() !== "")
    {
        log_password = md5(password);
    }
    $(".loginmessage").html('');
    $(".login").attr("disabled",true);
    $("#spin_signin").addClass('show');
    var req =  new Request();
    req.data =
    {
        "email":log_name,
        "userpassword":log_password

    };

    req.url = "signin";
    RequestHandler(req,processlogin);

});

ajax 调用在 jquery.ajax.js 文件中。我已将类型指定为 POST,将数据类型指定为 JSON

function RequestHandler(request,response,resdata){
    $=jQuery.noConflict();
    var domain = "http://localhost/laravel_login/public/";
    var tempurl = domain+request.url;
    if(request.isfulluri){
    tempurl = request.url;
    }

$.ajax({

    type: request.type,
    url: tempurl,
    data: request.data,
    datatype:request.datatype,
    success: function(data){
        if(resdata != null && resdata != '')
        response(data,resdata);
        else
        response(data);
    },
    error: function(err){
        if(err.responseText == null || err.responseText == ""){
            alert("Error: Check your internet connection");
        }
        else{
            alert("Error:"+err.responseText);
        }
    }
});

我的控制器类(LoginController.php)包含

public function signin(){
    $response = array();
    $useremail = $this->input->post('email');
    $userpassword = $this->input->post('userpassword');
    if($useremail == '' || $userpassword == ''){
        $response['iserror'] = TRUE;
        $response['message'] = 'Please fill all the fields';
        echo json_encode($response);
        return;
    }
    else{

        $result = $this->UserAuthenticate->loginUser($useremail,$userpassword);

        echo json_encode($result);
        return;
    }   
}   

【问题讨论】:

    标签: ajax laravel


    【解决方案1】:

    请确保您已为完整路径定义了路线:

    laravel_login/public/signin

    您可以使用php artisan route:list --path=signin查看您的路线是否已注册。

    另外,在你的控制器方法中,而不是

    echo json_encode($result);
    return;
    

    我会用

    return response()->json($result);
    

    因为这会自动为您设置正确的 HTTP 标头。这样,传递给您的 javascript 回调函数的变量将是一个 Javascript 对象,而无需额外的解析。

    【讨论】:

      猜你喜欢
      • 2015-06-02
      • 2016-12-14
      • 2015-10-17
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多