Laravel:使用 jquery ajax api 发布数据来存储数据时获取 405 Method Not Allowed

Posted

技术标签:

【中文标题】Laravel:使用 jquery ajax api 发布数据来存储数据时获取 405 Method Not Allowed【英文标题】:Laravel: Get 405 Method Not Allowed while posting data using jquery ajax api to store data 【发布时间】:2014-08-25 10:11:08 【问题描述】:

我正在尝试使用 Laravel 4.* 中的 jQuery ajax api 将数据保存到数据库并收到 405 错误。

查看

Form::open(array("","id"=>"frmProcessLevel"))
   <input name="$result->id.'_'.str_replace(' ','-',$title)" id="processLevel">

   <h3>$title Impact rating</h3>
   <table class="table table-bordered" style="font-size: 12px">
       <thead>
           <tr>
               <th>Level</th>
               <th>Category</th>
               <th>Description</th>
           </tr>
       </thead>
       <tbody class="selectable selectable-rows">
           @foreach($impact_rating as $key => $value)
                <tr data-key="$key">
                    <td>$key</td>
                    <td>$impact_cat[$key]</td>
                    <td>$value</td>
                </tr>
           @endforeach
       </tbody>
   </table>
   Form::token()
   Form::submit('Save')
Form::close()

<script>
        //Submit the form functions
        $("#frmProcessLevel").submit(function (e) 
            e.preventDefault();
            var selectedLevel = $("#processLevel").val();
            var datastring = 'selectedLevel='+selectedLevel;
            //alert(selectedLevel);
            $.ajax( 
            headers: 
                    'X-CSRF-Token': $('meta[name="_token"]').attr('content')
                ,
                url: "/bia/create_critical_process/",
                type: "post",
                data: datastring,
                success: function (data) 
                    console.log(data);
                
            , "json");
        );
</script>

路线

Route::post('/bia/create_critical_process',array('before' => 'csrf','uses'=>'BiaController@createBiaStepThree'));

控制器

 public function createBiaStepThree()
        $data = Input::all();
        $last_insert_bia_id = Session::get('last_insert_bia_id');
        if (Request::ajex())
        
            Log::info(Input::all());
            $bia = new CriticalProcessStepThree();
            $bia->impact_rating_clinical = $data['selectedLevel'];
            $bia->key_process_fk = 1;
            $bia->bia_entry_fk = $last_insert_bia_id;
            $bia->save();
        
    

传递令牌:http://words.weareloring.com/development/laravel/laravel-4-csrf-tokens-when-using-jquerys-ajax/

【问题讨论】:

您的路线在我看来是错误的。您缺少它使用的控制器的数组中的密钥。应该是'uses'=&gt;'BiaController@createBiaStepThree' @Jeemusu 我已经添加了,还是不行 然后更新您的问题以反映新代码。通过仍然无法正常工作,我假设您遇到了相同的 405 错误? @Jeemusu 是的得到同样的错误,我更新了代码。 好的,根据我的理解,我将路由更改为 /bia/create_critical_process?并有 404 而不是 405 【参考方案1】:

AJAX 中的示例。

var formData = new FormData();
            formData.append("password", password.val());
        $.ajax(
             url: 'btn',
             method: 'post',
             processData: false,
             contentType: false,
             cache: false,
             dataType: 'json',
             data: formData,
             success: function(data)
                    var vote_now = $("#vote_now");
                    if(data.btn == 'visible')
                        vote_now.fadeIn();

                    
                    else 

                        vote_now.fadeOut();
                    

                    ,
                error: function()

             
        );

【讨论】:

【参考方案2】:

在您的控制器中,您有一个错字。

应该是

if(Request::ajax()) 

而不是

Request::ajex()

不确定这是否是您唯一的问题,但这是其中之一。

编辑:你也应该设置你的请求类型。

type    :"POST",

还要确保您的路线设置为接受类似的帖子请求。

Route::post('route/what/ever/you/want', 'Controller@function');

【讨论】:

以上是关于Laravel:使用 jquery ajax api 发布数据来存储数据时获取 405 Method Not Allowed的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中使用 Ajax/jQuery 从数据库中获取数据

使用 Laravel 将 jQuery Ajax POST 请求作为 GET 发送

使用ajax jquery的laravel消息闪烁

使用 jquery-Ajax 在 html 表中显示 laravel 返回结果

在 laravel 5.2 中使用 jquery 和 ajax 出现 500 内部服务器错误

使用 JQUERY 和 AJAX 在 Laravel 分页中重新填充表数据