首先你好, 我有一个我无法管理的问题。 我发布了一个像下面这样的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的网址(这是我的项目中也找到的网址)。我已经尝试了所有可能的警告,我检查了我的代码,并且确信每件事情都很完美
是什么导致了这一点,我希望我能描述我的问题是正确的 谢谢答案 0 :(得分:0)
状态码302表示重定向!不止一个 对此的解释,但通常是由于受到保护的路线 用户未连接时使用auth中间件!
要通过XHR请求与laravel通信最好的方法,这样做是使用Laravel Passport(link here)!我已经遇到过这种问题!这个问题是Laravel在收到请求ajax时检查它是否在标题中有“授权”标题,否则重定向用户,因为对他来说他没有访问令牌
如何安装Laravel Passport?
composer require laravel/passport
php artisan migrate
以迁移护照表<强>配置强>
转到Config / auth.php并将api驱动程序更改为passpor
'api' => [
'driver' => 'passport',
'provider' => 'users',
],