2017-08-12 99 views
0

我不能將我的數據發佈到我的控制器,我的ajax調用有什麼問題嗎?我的設置爲web.php,或者是控制器沒有設置,我得到的錯誤是。提醒這是局部如何在Laravel 5.4中發佈數據控制器?

運行POST http://127.0.0.1:8000/change-rank 500(內部服務器錯誤)

JS

$('.rank-select').change(function(){ 
    var id = $(this).val(); 
    var memberId = $(this).closest('.irmember').attr('id'); 
    console.log(id); 
    console.log(memberId); 
    $.ajax({ 
       type: "POST", 
       url: 'change-rank', 
       data: {id: id, memberId, memberId}, 
       success: function(msg) { 
        console.log(msg); 
       } 
      }); 
}) 

web.php

Route::post('change-rank', '[email protected]'); 

RankController.php

namespace App\Http\Controllers; 

use App\Rank; 
use Illuminate\Http\Request; 

class RankController extends Controller 
{ 
    public function changeRank() 
    { 
     info("hi"); 
    } 
} 
+0

什麼是info()函數? –

+0

在Laravel中它充當日誌,所以如果是成功的,我會在日誌文件中看到「hi」 – Jeremy

+0

很酷,不知道'Laravel'具有這個功能。提出請求時,您在網絡選項卡中收到的回覆是什麼?如果你沒有在你的'laravel.log'中得到什麼錯誤(我會建議先清除日誌)。 –

回答

1

你展示不包括CSRF令牌,這肯定會拋出一個500服務器錯誤的JS代碼。有不同的方法可以將您的CSRF令牌包含在AJAX調用中,下面是一個示例。

在您的形式:

<form> 
    {{ csrf_token() }} 
    .... 

在您的JS:

var token = $('input[name="_token"]'); 
.... 
$.ajax({ 
    data: {_token: token, id: id, memberId: memberId}, 
    ... 

other approaches here on SO和Laravel文檔suggest another method

順便說一句,500 server error只是一個通用的錯誤告訴你,好吧,有一個服務器錯誤。你真的需要知道什麼錯誤是如果你想解決它 - 你應該能夠在laravel和webserver(Apache/nginx/etc)日誌中看到。您的日誌可能會說「CSRF TokenMismatchException」,這可能導致您直接找到答案! :-)

編輯

我剛纔注意到你的Javascript一個錯字,我最初複製到我的回答。它可能只是一個錯字而不是真正的代碼,因爲它可能會拋出JS錯誤而不是運行並生成服務器錯誤。

data: {_token: token, id: id, memberId, memberId}, 

應該是:

data: {_token: token, id: id, memberId: memberId}, 

(結腸memberId之後)。

1
laravel 5.4

更改您的JS代碼,如:

$('.rank-select').change(function(){ 
    var id = $(this).val(); 
    var memberId = $(this).closest('.irmember').attr('id'); 
    console.log(id); 
    console.log(memberId); 
    $.ajax({ 
       type: "POST", 
       url: 'change-rank', 
       data: {id:id, memberId:memberId}, 
       success: function(msg) { 
        console.log(msg); 
       } 
      }); 
}); 
+0

@jeremy:發現這有什麼運氣? –

+0

嘿,不,這是比添加分號冒號更多的路由問題:/ – Jeremy

+0

它是什麼? –

0

它簡單的更改爲ajax params它應該很好。

$('.rank-select').change(function(){ 
    var id = $(this).val(); 
    var memberId = $(this).closest('.irmember').attr('id'); 
    console.log(id); 
    console.log(memberId); 
    $.ajax({ 
     type: "POST", 
     url: 'change-rank', 
     data: {id:id, memberId:memberId}, 
     success: function(data) { 
      console.log(data); 
     } 
    }); 
}); 

和控制器的文件,

public function changeRank(Request $request) 
{ 
    return $request->all(); 
} 
相關問題