2017-12-21 3 views
1

laravel v5.5.24에서 작동하도록 아약스 게시물을 가져 오는 데 어려움이 있습니다. 여기 CSRF 토큰이 포함되어 있어도 Laravel ajax 게시가 작동하지 않습니다.

var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content'); 
$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 
$.ajax({ 
    url: "/postCustomer?XDEBUG_SESSION_START=19683", 
    type: 'POST', 
    data: {_token: CSRF_TOKEN, message:myData, "_method": 'POST'}, 
    dataType: 'JSON', 
    success: function (data) { 
     console.log('call to postCustomer successful'); 
    } 
}); 

내 경로입니다 : 여기처럼 내 아약스 호출 모습입니다

Route::post('/postCustomer','[email protected]'); 

이 문제에 대한 흥미로운 점은 모든 게시물의는의 (모두 아약스 호출을 얻기 위해 변경 될 때 및 경로에서) 요청이 도착하여 올바르게 처리됩니다. 디버그가 트리거되고 모두 정상입니다. 그러나 route 및 ajax 호출이 POST로 설정되어 있으면 디버그가 실행되지 않고 요청이 나타나지 않습니다. 물론 이것은 CRSF 문제와 같은 냄새가 나지만 헤더에 CRSF 토큰을 포함합니다. .blade.php 파일 내부에 자바 스크립트 코드를하려고하면

+0

당신은 데이터 객체 내부의'_token'을 통과 할 필요가 없습니다. CSRF 토큰은'$ .ajaxSetup()'을 통해 헤더에 자동으로 추가된다. 네트워크 요청 스크린 샷을 게시 할 수 있습니까? –

+0

양식 태그 안에 코드를 게시 할 수 있습니까? –

+0

Hav 콘솔을 점검 했습니까? – Bugfixer

답변

0

data: {_token:'{{ csrf_field() }}', message:myData, "_method": 'POST'}, 

+0

답장을 보내 주셔서 감사하지만 작동하지 않았습니다. –

+0

어떤 오류가 발생 했습니까? 은 정확한 URL입니까? 나는 보통 URL : url : "{{url ('postCustomer')}}"+ '?'+ 'XDEBUG_SESSION_START = 19683'에서이 작업을 수행합니다. –

0

이 시도의 도움, <meta name="_token" content="{!! csrf_token() !!}"/>

$.ajaxSetup({ 
     headers: 
      {'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')} 
    }); 
$.ajax({ 
    url: "/postCustomer?XDEBUG_SESSION_START=19683", 
    type: 'POST', 
    data: {message:myData, "_method": 'POST'}, 
    dataType: 'JSON', 
    success: function (data) { 
     console.log('call to postCustomer successful'); 
    }}); 

아약스 데이터 토큰을 전달할 필요가 없습니다 희망 다시.

0

감사의 인사 모두에게 진심으로 감사드립니다. 이 물건을 푸는 데 몇 가지 도움이되었습니다. 먼저, CSRF 토큰 뭉치 인 을 통합하고, 데이터로 보내고있는 내용만으로 제한했습니다. ajaxSetup에서 CSRF 토큰을 데이터에 포함 할 필요가 없습니다. 두 번째 것은 내 게시물에서 볼 수 없지만 Ajax 트랜잭션을 트리거 한 버튼과 관련된 경쟁 조건이 발생했습니다. 버튼은 아약스가 할 수 있기 전에 페이지를 다시 불러오고 있었기 때문에 이따금 씩 작동하는 것처럼 보였지만 대부분 그렇지 않았습니다. 따라서 false를 반환하는 것은 필요하지 않습니다. 두 위치 모두에서 아는 것은 아니지만 확실히 ajax 트랜잭션이 호출되고 콜백을 기다리는 것입니다. 작동하는 코드는 아래에서 찾을 수 있습니다. 다른 사람들이 POST가 작동하지 않는 것을 알아 내려고 미친 듯이 밤을 보내는 것을 막을 수 있기를 바랍니다. 포인트를 버리십시오 : ajaxSetup 호출에서 CSRF를 처리하고 전체 비즈니스에서 false를 리턴하십시오.

모두에게 감사드립니다.

- 조지 작은 옹기 병 애 프톤, 버지니아

   $.ajaxSetup({ 
        headers: { 
         'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
        } 
       }); 
       $.ajax({ 
        /* the route pointing to the post function */ 
        url: "/postCustomer?XDEBUG_SESSION_START=19159", 
        type: 'POST', 
        /* send the csrf-token and the input to the controller */ 
        data: {message:myData}, 
        dataType: 'json', 
        /* remind that 'data' is the response of the AjaxController */ 
        success: function (data) { 
         $("#success_msg").show(); 
         return false; 
        } 
       }); 
       return false; 
관련 문제