programing

Jquery Ajax POST에서 400개의 잘못된 요청 오류가 발생함

stoneblock 2023. 3. 15. 17:49

Jquery Ajax POST에서 400개의 잘못된 요청 오류가 발생함

Jquery를 사용하여 Ajax POST 요청을 보내려고 하는데 400개의 잘못된 요청 오류가 발생했습니다.

코드는 다음과 같습니다.

$.ajax({
  type: 'POST',
  url: "http://localhost:8080/project/server/rest/subjects",
  data: {
    "subject:title":"Test Name",
    "subject:description":"Creating test subject to check POST method API",
    "sub:tags": ["facebook:work", "facebook:likes"],
    "sampleSize" : 10,
    "values": ["science", "machine-learning"]
  },
  error: function(e) {
    console.log(e);
  }
});

"요청에서 리소스를 빌드할 수 없습니다"라고 되어 있습니다.제가 무엇을 빠뜨리고 있나요?

결국, 저는 실수를 했고, 그 이유는 제가 보내드린 JSON 데이터의 스트링을 해야 하기 때문입니다.XHR 객체에서 콘텐츠 유형과 데이터 유형을 설정해야 합니다.올바른 버전은 다음과 같습니다.

$.ajax({
  type: 'POST',
  url: "http://localhost:8080/project/server/rest/subjects",
  data: JSON.stringify({
    "subject:title":"Test Name",
    "subject:description":"Creating test subject to check POST method API",
    "sub:tags": ["facebook:work", "facebook:likes"],
    "sampleSize" : 10,
    "values": ["science", "machine-learning"]
  }),
  error: function(e) {
    console.log(e);
  },
  dataType: "json",
  contentType: "application/json"
});

다른 사람에게 도움이 될지도 몰라.

혹시 다른 사람이 이걸 마주칠까 봐데스크탑 브라우저에서는 정상적으로 동작하고 있는 웹 사이트가 있습니다만, 안드로이드 디바이스에서는 400 에러가 발생하고 있습니다.

그것은 위조 방지 토큰으로 판명되었다.

$.ajax({
        url: "/Cart/AddProduct/",
        data: {
            __RequestVerificationToken: $("[name='__RequestVerificationToken']").val(),
            productId: $(this).data("productcode")
        },

문제는 이었습니다.네트워크 컨트롤러가 올바르게 설정되지 않았습니다.

컨트롤러에 속성을 추가해야 했습니다.

    [AllowAnonymous]
    [IgnoreAntiforgeryToken]
    [DisableCors]
    [HttpPost]
    public async Task<JsonResult> AddProduct(int productId)
    {

그 코드는 재검토가 필요하지만 적어도 나는 그 원인이 무엇인지 알고 있다.400 에러는 전혀 도움이 되지 않습니다.

네, 해야 돼요.stringifyJSON데이터 처리400 bad request데이터를 식별할 수 없기 때문에 오류가 발생합니다.

400 Bad Request

잘못된 요청입니다.브라우저에서 이 서버가 인식할 수 없는 요청을 보냈습니다.

또한 추가가 필요합니다.content type그리고.datatype뿐만 아니라.그렇지 않은 경우,415라고 하는 에러Unsupported Media Type.

415 지원되지 않는 미디어 유형

이거 먹어봐.

var newData =   {
                  "subject:title":"Test Name",
                  "subject:description":"Creating test subject to check POST method API",
                  "sub:tags": ["facebook:work", "facebook:likes"],
                  "sampleSize" : 10,
                  "values": ["science", "machine-learning"]
                  };

var dataJson = JSON.stringify(newData);

$.ajax({
  type: 'POST',
  url: "http://localhost:8080/project/server/rest/subjects",
  data: dataJson,
  error: function(e) {
    console.log(e);
  },
  dataType: "json",
  contentType: "application/json"
});

이렇게 하면 필요한 데이터를 쉽게 수정할 수 있습니다.Ajax 블록 외부에 정의되어 있기 때문에 혼동하지 않습니다.

질문이 좀 오래된데...하지만 만약 누군가가 오류 400에 직면한다면, 그것은 또한 csrf를 게시할 필요성으로부터 올 수 있습니다.투고 요구에 대한 파라미터로서의 토큰.

템플릿의 craft에서 이름과 값을 얻어야 합니다.

<script type="text/javascript">
    window.csrfTokenName = "{{ craft.config.csrfTokenName|e('js') }}";
    window.csrfTokenValue = "{{ craft.request.csrfToken|e('js') }}";
</script>

요청하신 대로 전달해 드리겠습니다.

data: window.csrfTokenName+"="+window.csrfTokenValue

다음 함수를 사용하여 "데이터" 개체에서 쿼리를 작성해야 합니다.

function buildQuery(obj) {
        var Result= '';
        if(typeof(obj)== 'object') {
            jQuery.each(obj, function(key, value) {
                Result+= (Result) ? '&' : '';
                if(typeof(value)== 'object' && value.length) {
                    for(var i=0; i<value.length; i++) {
                        Result+= [key+'[]', encodeURIComponent(value[i])].join('=');
                    }
                } else {
                    Result+= [key, encodeURIComponent(value)].join('=');
                }
            });
        }
        return Result;
    }

다음으로 다음으로 넘어갑니다.

var data= {
"subject:title":"Test Name",
"subject:description":"Creating test subject to check POST method API",
"sub:tags": ["facebook:work, facebook:likes"],
"sampleSize" : 10,
"values": ["science", "machine-learning"]
}

$.ajax({
  type: 'POST',
  url: "http://localhost:8080/project/server/rest/subjects",
  data: buildQuery(data),
  error: function(e) {
    console.log(e);
  }
});

앞으로도 Wordpress에서 AJAX를 사용하다가 400개의 오류가 발생한 분들에게 도움이 되었으면 합니다.이 질문은 오래되었지만, 제공된 솔루션은 모두 프로그래밍 방식으로 이루어졌으며, 많은 사람들이 코드를 검토하여 정답을 반복적으로 찾았지만 효과가 없다는 것을 알게 될 것입니다.

"WP AJAX request returning 400 Bad Request" 또는 "WP AJAX request returning 0"을 해결하는 방법을 묻는 수십 개의 결과를 찾았지만 오늘은 아무 것도 작동하지 않았습니다.

"How do I fix 400 bad request on Wordpress"를 검색한 결과 https://wp-umbrella.com/troubleshooting/400-bad-request-error-on-wordpress/에서 답이 나왔습니다.

웹 브라우저 캐시 및 쿠키 지우기

놀라실 수도 있지만 WordPress의 400개 오류는 브라우저의 캐시와 쿠키를 지우는 것으로 해결할 수 있습니다.브라우저 캐시는 사용자가 방문하는 웹 사이트의 이미지, 스크립트 및 기타 부분을 일시적으로 저장하여 검색 속도를 높입니다.

캐시와 쿠키를 모두 클리어하면 400 Bad Request 코드가 사라지고 결과는 예상대로 AJAX 결과를 반환합니다.

언급URL : https://stackoverflow.com/questions/16017081/getting-400-bad-request-error-in-jquery-ajax-post