【发布时间】:2018-07-30 20:41:03
【问题描述】:
首先你好, 我有一个我无法解决的问题。 我正在发布一个 ajax 请求,如下所示
<script>
$(document).ready(function(){
$(document).on('keydown' , '.message_input', function(e){
var token = $('input[name=_token]').val();
var msg = $(this).val();
var element = $(this) ;
var ul = element.parent().parent().find('ul');
var authenticated_user_id = $(this).attr('data-auth-id');
var user_id = $(this).attr('data-to-user-id');
var conversation_id = $(this).attr('data-conversation-id');
if(!msg == '' && e.keyCode == 13 && !e.shiftKey){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url : "{{ url("$lang/post_message_test")}}" ,
method : 'POST',
cache: false,
dataType:'JSON',
data: { msg:msg , authenticated_user_id:authenticated_user_id , user_id:user_id , conversation_id: conversation_id , _token:token },
success:function(data){
// my logic
}
});
return false ;
}
});
});
</script>
这需要一个聊天控制器和一个名为 postMessage 的特定函数
结构如下
public function postMessage(Request $request ){
if($request->ajax()){
/** data coming from our post request with an elegant way */
$authenticated_user_id = $request->get('authenticated_user_id');
$user_id = $request->get('user_id');
$conversation_id = $request->get('conversation_id');
$msg = $request->get('msg');
// find user image
$user = User::find($authenticated_user_id) ;
$image = asset('uploads/users/').'/'.$user->profileImage ;
$name = '' ;
if($user->userType == 'doctor'){
$name = $user->doctorName ;
}else{
$name = $user->headPersonName ;
}
$message = new Message ;
$message->sender_id = $authenticated_user_id ;
$message->receiver_id = $user_id ;
$message->conversation_id = $conversation_id ;
$message->message = $msg ;
$message->is_read = 'not_read' ;
if($message->save()){
$msg=Message::where('id',$message->id)
->select('id','message','sender_id','receiver_id','created_at')
->with('sender')
->with('receiver')
->first();
$sender_name = $msg->sender->name ;
$sender_image = $msg->sender->profileImage ;
$dt = Carbon::now();
$message_date = $dt->diffForHumans() ;
event(new MessageWasRecieved( $user_id , $message->message , $image , $authenticated_user_id , $name ));
return Response::json([
'status'=>'success' ,
'message'=>$msg->message ,
'user_id'=>$user_id ,
'auth_id'=>Auth::user()->id ,
'image'=>$sender_image ,
'name'=>$sender_name
]);
}else{
return Response::json([
'status'=>'error' ,
]);
}
}
}
在这个简单的逻辑中,当它到达事件函数时,它应该触发那个事件,并且在 javascript 中等待监听这个事件。
真正发生的是,在发布到这个 url post_message_test 之后 网络选项卡中发生的事情而不是返回状态代码 200 它给了我 302 状态(检查下图)
并调用另一个名为campaign 的url(这也是在我的项目中找到的url)。我已经尝试了所有可能的注意事项,我检查了我的代码并确信每件事都运行良好
那是什么原因造成的,我希望我能正确描述我的问题
谢谢
【问题讨论】:
标签: php laravel events pusher broadcasting