Как управлять несколькими AJAX-запросами в Laravel 5.2 - PullRequest
0 голосов
/ 11 сентября 2018

Я работаю над приложением, в котором различные ajax-запросы запускаются в зависимости от различных действий.

Например, есть окно чата с кнопкой отправки. Когда я нажимаю на эту кнопку, ajax успешно отправляет пустое сообщение. Это хорошо работает. Но когда я нажимаю кнопку «Отправить» слишком много раз, при запуске некоторые запросы отвечают 200 (нормально), а затем - 500 (внутренняя ошибка сервера). Из-за этого другие запросы, которые идут непрерывно как updateLastActivity, также мешают. Предварительный просмотр ошибки в инструменте разработчика: К сожалению, что-то пошло не так.

Примечание: когда я делаю эту систему чата в ядре PHP, она работает нормально. Нет внутренней ошибки сервера, когда я отправляю слишком много запросов.

Вот код, который я использую

    //the following code is used to send the message
 $(document).on('click','.send_message_bt',function(event){
     event.preventDefault();

        var id=$(this).data('id');
        var name=$(this).data('name');
        var message=$("#message_field-"+id).val();



    $.ajax({
        //headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },
         headers: { 'X-CSRF-TOKEN': {!! json_encode(csrf_token()) !!} },
        url:'{{route('user.sendmessage')}}',
        type:'POST',
        data:{
          id:id,
        message:message
           },
        success:function(data,status){
        //clear the message field value
        $("#message_field-"+id).val('');

        //update the chat history
        fetchChatHistory(id,name);


    },
        error:function(response){
           if(response.status==401){
                  alert('You are not logged in!');
                  window.location=window.location.href;
                   }

           }

});

});

вот код конца

public function sendMessage(Request $request){
    $message=new Userchatmessage();
     $message->message=$request->message;
     $message->sender_id=Auth::user()->id;
     $message->receiver_id=$request->id;
     $message->save();
     return response('success');
}

Как решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Асинхронизация и ожидание могут помочь. Пусть асинхронная функция

async function doAjax(){
    await runFirstAjaxCall();
    await runAfterFirstAjaxCallSuccess();
    ....
    ....
}
doAjax();
0 голосов
/ 11 сентября 2018

Думаю, это не проблема с Laravel или чем-то еще, а с вашим браузером. Каждый браузер имеет максимальное количество одновременных подключений, которые он открывает для определенного домена.

Подробнее об этой проблеме здесь и здесь .

Если вы хотите создать приложение для чата в реальном времени, подумайте о том, чтобы использовать что-то вроде NodeJS и Socket.io .

...