【问题标题】:jQuery POST request always returns 404 not found with Laravel 4jQuery POST 请求总是返回 404 not found with Laravel 4
【发布时间】:2014-04-10 17:20:57
【问题描述】:

每次我尝试使用 jQuery 发出 POST 请求时,我都会不断收到 404 错误。

这是UserController.php

class UserController extends BaseController {

    public function signUp($username, $password, $email) {

        $user = new User();
        $user->setUsername($username);
        $user->setPassword($password);
        $user->setEmail($email);

        return 'OK';
    }
}

这是routes.php

Route::get('/signup', function(){

    return View::make('signup');
});

Route::post('/signup/{username}/{password}/{email}', 'UserController@signUp');

我总是收到这个错误:

POST http://192.168.0.102/webname/public/signup 404 (Not Found)

这是为什么呢?如果我尝试导航到http://192.168.0.102/webname/public/signup,页面已加载并显示注册表单。

【问题讨论】:

  • 为什么你的网址中有/webname/public?这看起来很糟糕。
  • 我知道,但我只是设置了 Laravel...

标签: php jquery laravel


【解决方案1】:

您正在使用“GET”类型的路由。

让我解释一下。

如果你想使用像 /route/{something}/{different}这样的路由 您必须手动生成与该路由匹配的 URL。

URL::route('route', $something, $different)

变量传递思想 POST 方法仅在 HTTP 标头中可用。

所以你不能通过 POST 方法传递 variable 来调用 Route::post('/route/{variable}') 。 仅使用 Route::get()。

使用 POST 获取变量

Input::get('your_variable_name')

在您的控制器操作中。

对不起我的英语不好...有点累,我也是法国人!

【讨论】:

  • 谢谢你的回答,我的问题已经解决了 :) 别担心你的英语,没关系 :)
【解决方案2】:

你正在定义

Route::post('/signup/{username}/{password}/{email}', 'UserController@signUp');

但尝试访问:/webname/public/signup。

POST 不存在这种模式,而只是 GET。

【讨论】:

    【解决方案3】:

    我遇到了一些与此讨论相关的麻烦,我认为不值得他们自己发帖:jQuery post 请求一直由我的 Laravel get 控制器处理。

    我的路线:

    Route::controller('/test','TestController');
    

    在我看来:

    <script>
        $(document).ready(function() {          
            jQuery.ajax({
                type:'post',
                url: '/test/x/',
                success: function (response) {
                    alert(response);
                }
            });
        });
    </script>
    

    我的控制器:

    public function getX() {
        return 'Get';
    }     
    public function postX() {
        return 'Post';
    }
    

    在页面加载时,我预计会看到一条显示“发布”的警报……但我却一直看到“获取”。 Laravel 将 post 请求路由到 get 控制器。

    解决这个问题与尾部斜杠有关。显然,Laravel 将“/test/x/”解释为 GET 路由,而将“/test/x”解释为 POST 路由。所以教训是 Laravel 路由可能很微妙。希望这有助于澄清讨论。

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 2015-06-09
      • 2021-03-31
      • 2021-11-04
      • 2016-01-01
      • 2016-11-19
      • 2016-10-16
      • 2017-12-11
      相关资源
      最近更新 更多