我正在使用带有表单数据的laravel,一个ajax调用,然后是一个将消息发布到多个端点的控制器,我不确定如何处理循环结构。
我正在呼叫一个接受页面ID,令牌和消息的端点,但是我有多个页面ID和令牌,因此,当用户键入消息并点击提交时,我需要将其发布到所有页面,如下所示:
$post = $pagePost->post($id . '/feed/', $data, $accesstoken);
假设,对于每页,我们将对4页进行此操作:
post(1 . '/feed/', $data, 1234)
post(2 . '/feed/', $data, 12345)
post(3 . '/feed/', $data, 12346)
post(4 . '/feed/', $data, 12347)
在加载带有表单的刀片时,我已经加载了所有页面ID和访问令牌,因此当用户提交时,我需要循环调用每个调用,而我不确定该怎么做这个
刀片:
<div class="uk-grid uk-container-center ">
@foreach($response['data'] as $page)
<h2>{{$page['id']}}</h2>
<h4>{{$page['access_token']}}</h4>
@endforeach
</div>
$("#postNow").click(function(e){
e.preventDefault();
var post = $("#Post").val();
$.ajax({
type:'POST',
url:'save',
data:{post:post},
_token: '{{ csrf_token() }}',
success:function(data){
window.location.href = "/library";
}
});
});
控制器:
public function Save(Request $request)
{
$Post = $request->post;
$data = array('post' => $post);
//not sure where I need to do a foreach here
$post = $pagePost->post($id . '/feed/', $data, $accesstoken);
}
答案 0 :(得分:1)
您可以在javascript部分中重复使用循环:
var promises = [];
var promise;
@foreach($response['data'] as $page)
promise = $.ajax({
type:'POST',
url:'{{$page['id']}}' + '/feed/' + '{{$page['access_token']}}',
data:{post:post},
_token: '{{ csrf_token() }}'
});
promises.push(promise);
@endforeach
$.when.apply($, promises).then(function() {
$.ajax({
type:'POST',
url:'save',
data:{post:post},
_token: '{{ csrf_token() }}',
success:function(data){
window.location.href = "/library";
}
});
});
注意,我也跟踪了诺言。您不希望在成功回调中留下重定向,否则页面可能会在重新启动或完成之前重新加载。