2016-09-16 125 views
2

我想發送一個簡單的POST請求數據到控制器,但與Ajax。沒有什麼奇特的,我只是想將數據發送到我的控制器而沒有頁面重定向/刷新。發送數據到控制器與ajax在laravel

編輯:更新所有的代碼是什麼它是目前

在頭

<meta name="csrf-token" content="{{ csrf_token() }}" /> 
<script>var host="{{url()}}"</script> 

路線

post('/messages/unread', '\CommendMe\Http\Controllers\[email protected]'); 

標記

<div class="accordion messageAccordion getRequestReadMessage" data-value="{{$message->id}}"> 

腳本

$('.getRequestReadMessage').click(function() { 
    $readValue = $(this).attr('data-value'); 
    $token  = $('meta[name=csrf-token]').attr("content"); 
     $.ajax({ 
     type: "POST", 
     url: host + '/messages/unread', 
     data: {readValue: $readValue, _token:$token}, 
    }); 
}); 

控制器

public function getReadRequest(Request $request) 
{ 
    dd(Input::get("readValue")); 
} 

回答

2

由於您使用POST方法,你必須向它發送一個_token,你可能得到一個令牌不匹配錯誤。

在你的頭,把這個:

<meta name="csrf-token" content="{{ csrf_token() }}" /> 

在JS

$('.getRequestReadMessage').click(function() { 
    $readValue = $(this).attr('data-value'); 
    $token  = $('meta[name=csrf-token]').attr("content"); 
     $.ajax({ 
     type: "POST", 
     url: host + 'messages/unread', 
     data: {readValue: $readValue, _token:$token}, 
    }); 
}); 

您的路線似乎有點過,但。 其更新到: post('/messages/unread', '\CommendMe\Http\Controllers\[email protected]');

====編輯=====

Additionaly,我看到你有圍繞表單域格,因爲你正在使用AJAX,它不是必需的。

<div class="accordion messageAccordion getRequestReadMessage" data-value="{{$message->id}}"> 

我所做的就是刪除表單域及隱藏的輸入,還我刪除了類型=提交屬性,因爲它不是一個形式的按鈕。我將算法中的值屬性更改爲數據值。改變你的JS到這一點:

$readValue = $(this).attr('data-value'); 

EDIT 2

$('.getRequestReadMessage').click(function() { 
    $readValue = $(this).attr('data-value'); 
    $token  = $('meta[name=csrf-token]').attr("content"); 
    $.ajax({ 
     type: "POST", 
     url: host + '/messages/unread', 
     data: {readValue: $readValue, _token:$token}, 
    }).success(function (res){ 
     alert('it work! :D'); 
    }); 
}); 
+0

在控制檯中仍然收到錯誤「ReferenceError:host is not defined」。 –

+1

你有沒有在你的JS文件中定義變量主機,或者你有沒有在任何地方定義它? – Carlos

+0

我現在就做!但是,當我點擊.getRequestReadMessage時,沒有任何事情發生。 –

4

阿賈克斯部分本身似乎就好了。 確保您在代碼的某處定義了host。例如:

<head><script>var host="{{url()}}"</script> 

但是,如果你正在聽click<a href,這將會是最好的,以防止事件的冒泡。像這樣:

$('.getRequestReadMessage').click(function(e) { 
    e.preventDefault(); 

對於Laravel Controller的方法,有很多種方法。 例如:

dd(Input::get("readValue")); 
dd(Request::get("readValue")); 
dd($request->input("readValue"); 

要麼應該做的伎倆

路線是最有可能斷過,路徑需要的「未讀」的工作。

post('/messages/unread', '\CommendMe\Http\Controllers\[email protected]'); 
+0

如果使用Laravel 5,你也可以做'請求() - >輸入( 'readValue')' – Karl

+0

我可能要指定當我點擊「.getRequestReadMessage」,在控制檯中出現錯誤「ReferenceError:host is not defined」。 –

+0

這樣做:'',這樣你就可以在全局JS中看到你的站點可見的引用 –

0

嘗試調整你的路線,這一點:

Route::post('/messages/unread', '\CommendMe\Http\Controllers\[email protected]'); 
相關問題