IT

Ajax post request in laravel 5 return error 500 (내부 서버 오류)

itgroup 2023. 10. 15. 17:13
반응형

Ajax post request in laravel 5 return error 500 (내부 서버 오류)

이것은 larabelle 5의 나의 테스트 agax입니다(아래 참조).

$("#try").click(function(){
    var url = $(this).attr("data-link");
    $.ajax({
        url: "test",
        type:"POST",
        data: { testdata : 'testdatacontent' },
        success:function(data){
            alert(data);
        },error:function(){ 
            alert("error!!!!");
        }
    }); //end of ajax
});

트리거 링크(trigger link)

<a href="#" id="try" data-link="{{ url('/test') }}">Try</a>

그리고 나의 진로.

Route::post('test', function()
{
    return 'Success! ajax in laravel 5';
});

하지만 구글 크롬으로 콘솔을 실행하면 오류가 발생하고 예상 응답인 "'성공! laravelle 5의 ajax"를 반환합니다;"를 반환하지 않습니다.

POST http://juliver.laravel.com/test 500 (내부 서버 오류)

내 코드에 무슨 문제가 있습니까?제가 놓친게 있나요?

이 질문은 잠시 동안 존재하지만, 수락된 답변이 주어지지 않습니다. 해결 방법을 알려드립니다.ajax와 함께 보내고 CSRF 미들웨어를 사용하는 경우가 많기 때문에 요청 시 헤더를 추가로 제공해야 합니다.

각 페이지(또는 마스터 레이아웃)에 메타 태그 추가:<meta name="csrf-token" content="{{ csrf_token() }}">

그리고 javascript-file(또는 페이지 내 섹션)에 다음을 추가합니다.

$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});

자세한 내용은 https://laravel.com/docs/master/csrf#csrf-x-csrf-token 을 참조하십시오.

laravel ajax 내부 서버 오류의 90%는 CSRF 토큰 누락으로 인한 것입니다.다음과 같은 다른 이유가 있습니다.

  • 잘못된 요청 유형(예: 가져오기 위해 게시물 보내기)
  • 잘못된 데이터 유형이 수신됨(예: JSON이 예상되고 앱에서 문자열을 반환함)
  • .htaccess가 잘못 구성되었습니다.
  • 결측 경로
  • 코드 오류

이에 대한 자세한 내용은 여기 https://abbasharoon.me/how-to-fix-laravel-ajax-500-internal-server-error/ 에서 확인할 수 있습니다.

지금쯤은 해결이 된 것 같은데 그래도 여기서 가장 좋은 일은 당신의 양식과 함께 토큰을 보내는 것입니다.

{!! csrf_field() !!}

그리고 당신의 아약스에서

$("#try").click(function(){
var url = $(this).attr("data-link");
$.ajax({
    url: "test",
    type:"POST",
    data: { '_token': token, 'someOtherData': someOtherData },
    success:function(data){
        alert(data);
    },error:function(){ 
        alert("error!!!!");
    }
}); //end of ajax
});

VerifyCsrfToken.php 미들웨어에 URL을 추가할 수 있습니다.URL은 CSRF 확인에서 제외됩니다.

protected $except = [
    "your url",
    "your url/abc"
];

App\Http\Middleware\VerifyCsrfToken.php에서 파일을 다음과 같이 업데이트할 수 있습니다.

class VerifyCsrfToken extends BaseVerifier {

    private $openRoutes =
    [
        ...excluded routes
    ];

    public function handle($request, Closure $next)
    {
        foreach($this->openRoutes as $route)
        {
            if ($request->is($route))
            {
                return $next($request);
            }
        }

        return parent::handle($request, $next);
    }
};

이렇게 하면 crf 유효성 검사를 전역적으로 비활성화하지 않고도 확인하지 않을 특정 경로를 명시적으로 우회할 수 있습니다.

Laravel 7.X bootstrap.js에서 axios 관련 코드로 다음을 추가합니다.

window.axios.defaults.headers.common['X-CSRF-TOKEN'] = $('meta[name="csrf-token"]').attr('content');

설명할 수 없는 500개의 아약스 오류를 많이 해결했습니다.물론 액시오를 사용하는 사람들을 위한 것입니다.

기본적으로 Laravel은 CSRF 미들웨어와 함께 제공됩니다.

넌 두가지 옵션이 있다 :

  1. 요청 시 토큰 보내기
  2. CSRF 미들웨어 사용 안 함(권장되지 않음): in app\Http\Kernel.php $middleware 배열에서 VerifyCsrfToken 제거

다른 것들 때문에 이런 오류가 생긴 겁니다.내 페이지에 두개의 아약스 콜이 있습니다.첫 번째는 세이브 댓글, 또 하나는 세이브 라이크.내가 가는 길에php 나는 이것을 가지고 있었습니다:

Route::post('posts/show','PostController@save_comment');
Route::post('posts/show','PostController@save_like');

아약스콜과 같은 저장을 위해 500개의 내부 서버 오류가 발생했습니다. 그래서 두번째 줄 http request type을 PUT로 변경하면 오류가 사라집니다.패치도 쓸 수 있어요. 도움이 될지도 몰라요.

ajax를 통해 crf 필드를 통과해야 합니다. 여기 코드를 보세요.

$.ajax({
                                        type: "POST",
                                        url:'{{URL::to("/delete-specialist")}}',
                                        data: {
                                            id: id,

                                            _token: $('#signup-token').val()
                                        },
                                        datatype: 'html',
                                        success: function (response) {
                                            if(response=="deleted"){
                                                $("#"+id).hide();
                                                $("#message").html("successfully deleted");
                                            }

                                        }

                                    });

그리고 이 입력란을 작성하기 전에 작성해야 합니다.

<input id="signup-token" name="_token" type="hidden" value="{{csrf_token()}}">

그래도 이해가 안된다면 이 비디오를 즐겨주세요 https://www.youtube.com/watch?v=ykXL8o0slJA&t=20s

"Use Illuminate"를 추가하는 것을 잊지 마십시오.컨트롤러의 Http\Request;"

짧고 간단한 솔루션

e.preventDefault();
var value = $('#id').val();
var id = $('#some_id').val();
url="{{url('office/service/requirement/rule_delete/')}}" +"/"+ id;
console.log(url);
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
$.ajax({
/* the route pointing to the post function */
    url: url,
    type: 'DELETE',
/* send the csrf-token and the input to the controller */
    data: {message:value},
    dataType: 'JSON',
/* remind that 'data' is the response of the AjaxController */
    success: function (data) { 
    console.log(data)
    //$('.writeinfo').append(data.msg);
    //$('#ruleRow'+id).remove();
    }
});
return false;

대신 포스트 쿼리를 사용하는 것이 이 문제를 해결하는 데 도움이 되었습니다.

$.post('url', data, function(response) {
    console.log(response);
});

저도 같은 문제가 있었습니다.우인우 가 생깁니다.id테이블 필드(데이터베이스)가 자동 증분으로 설정되지 않았습니다.자동 증분으로 설정하면 작동하기 시작했습니다.

언급URL : https://stackoverflow.com/questions/30154489/ajax-post-request-in-laravel-5-return-error-500-internal-server-error

반응형