我迷失了做这件事的方法。所以基本上我得到了这样的多个评论形式:
@foreach($lists as $list)
//some views
<form class="commentForm">
<input type="text" class="commentBox" name="comment" />
<input type="submit" class="submitBtn" value="Comment" />
</form>
@endforeach
我想实现AJAX,以便每次用户评论某些内容时,页面都不会重新加载。我目前提交评论的路线是:
Route::post('list/{listID}/comment', 'ListController@comment');
我不知道如何将视图中的ID传递给AJAX,然后再传回控制器。我尝试了显而易见的一个,在AJAX网址中使用'list/{{ $list->id }}/comment'
,这是行不通的。还尝试了一些其他的东西,但基本上都是徒劳的。
提前谢谢!
编辑:我的AJAX代码:
$(document).ready(function(){
$(document).on("submit", '.commentForm', function(e){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
}
});
var data = $(this).serialize();
var me= this;
$.ajax({
type: 'POST',
url: 'posts/{{ $auction->id }}/comment',
data: data,
datatype: 'JSON',
success:function(data){
console.log(data);
},
error:function(data){
console.log(data);
}
});
return false;
})
});
我现在只是控制。记录输出,看它是否有效。
答案 0 :(得分:1)
我建议使用jQuery的.data()
功能,所以在foreach循环中你可以这样做:
<form class="commentForm" data-id="{{$list->id}}">
<input type="text" class="commentBox" name="comment" />
<input type="submit" class="submitBtn" value="Comment" />
</form>
然后一个听众统治他们:
$(document).on("submit", '.commentForm', function(e){
e.preventDefault();
var comment_id = $(this).data('id');
console.log('comment id = ',comment_id);
$.ajax({
type: 'POST',
url: 'posts/' + comment_id + '/comment',
//etc...
});
答案 1 :(得分:1)
在laravel中,他们使用刀片模板。我不知道你把你的ajax代码放在哪里,但这些括号:{{}},{!! !!}只有在使用扩展名.blade.php时才会被视为模板。
在laravel中你可以使用资源/视图下的.php作为html模板,但是{{}}内部的{。},{!! !!},其他刀片语法将被视为普通文本,而不是再次被解释。如果你需要,通常我会让布局像这样:
<html>
<head>
@yield("sytles")
@yield("additionalstyles")
@yield("includestyles")
................//as many as you need
</head>
<body>
<div>@yield("content")</div>//content here
@yield("scripts")
@yield("additionalscripts")
@yield("includescripts")
................//as many as you need
</body>
</html>
然后在视图中,当我需要发出ajax请求时,我会将它包含在@section(“script”)@stop或者尚未使用的产量中,所以例如视图部分在使用此模板后,您的代码可能会像这样:
@extends("layout")
@section("content")
@foreach($lists as $list)
//some views
<form class="commentForm">
<input type="text" class="commentBox" name="comment" />
<input type="submit" class="submitBtn" value="Comment" />
</form>
@endforeach
@stop
@section("additionalscript")
<script>
$(document).ready(function(){
$(document).on("submit", '.commentForm', function(e){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
}
});
var data = $(this).serialize();
var me= this;
$.ajax({
type: 'POST',
url: 'posts/{{ $auction->id }}/comment',
data: data,
datatype: 'JSON',
success:function(data){
console.log(data);
},
error:function(data){
console.log(data);
}
});
return false;
})
});
</script>
@stop
这样,你的
url: 'posts/{{ $auction->id }}/comment',
将会像
一样呈现url: 'posts/hansishandsome/comment',
希望这个帮助
答案 2 :(得分:0)
您可以执行以下步骤:
在Listid
中添加一个值为form
的隐藏字段,如:
<input type="hidden" id="listId" value="{{$list->id}}" />
然后你可以在ajax调用中使用它,如:
$listId = $("#listId").val();
答案 3 :(得分:0)
以下是您可以使用的方法
var listid = $('#listid').val();
并通过JQuery读取值
<script>
var list = {
id : {{ $list->id }} //you can also add other variables in the object
}
</script>
$.post('list/' + list.id + '/comment', data);
在你的js文件中使用列表对象
注意:列表对象必须在运行脚本之前初始化
{{1}}