source

jQuery's ajaxSetup - GET 요청에 대해서만 기본 데이터를 추가하려고 합니다.

ittop 2023. 8. 25. 23:58
반응형

jQuery's ajaxSetup - GET 요청에 대해서만 기본 데이터를 추가하려고 합니다.

Ajax 기반 사이트에서 AjaxSetup을 사용하여 다음과 같은 기본 데이터를 추가했습니다.

var revision = '159';
$.ajaxSetup({
    dataType: "text json",
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    data: {
        r: revision
    }
});

이는 새 리비전이 배포되고 프런트엔드가 백엔드에서 html 템플릿 또는 json-data를 요청할 때 캐시 누락을 보장하기 위한 것입니다.이러한 이유로 백엔드와 프런트엔드는 동일한 리비전 번호를 공유합니다.

문제는 프런트엔드가 PUT, POST 또는 DELETE를 수행할 때 백엔드가 매개 변수 'r'을 얻는 것에 대해 다소 불만을 느낀다는 것입니다.JQuery의 Ajax에게 이 데이터는 GET 요청을 수행할 때만 사용해야 하며 POST, PUT 또는 DELETE 요청을 수행할 때는 사용하지 않아야 한다고 말할 수 있는 방법이 없습니까?

업데이트:

나는 알고 있었기 때문에 먼저 beforeSend 기능을 사용해 보았습니다.그러나 settings.data를 변경하는 것은 가능했지만 Send가 돌아오기 전에 변경 사항이 사라지는 것처럼 보였습니다.내 잘못이었는지도.. :-)

나는 대신에 ajax PreFilter에 정착했습니다.하지만 그것은 파이처럼 쉽지 않았습니다.options.data는 객체가 아니라 $.param(object)의 결과이므로 첫 번째 과제는 매개 변수를 해제하는 것이었습니다.저는 결국 이렇게 되었습니다.

var revision = '159';
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    // do not send data for POST/PUT/DELETE
    if (originalOptions.type !== 'GET' || options.type !== 'GET') {
        return;
    }

    var data = originalOptions.data;
    if (originalOptions.data !== undefined) {
        if (Object.prototype.toString.call(originalOptions.data) === '[object String]') {
            data = $.deparam(originalOptions.data); // see http://benalman.com/code/projects/jquery-bbq/examples/deparam/
        }
    } else {
        data = {};
    }

    options.data = $.param($.extend(data, { r: revision }));
});

jQuery 1.5부터는 Prefilters를 통해 훨씬 더 우아하게 처리할 수 있습니다.

var revision = '159';
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    // do not send data for POST/PUT/DELETE
    if(originalOptions.type !== 'GET' || options.type !== 'GET') {
        return;
    }

    options.data = $.extend(originalOptions.data, { r: revision });
});

제 생각에 당신이 사용할 수 있는 것은beforeSend.

var revision = '159';
$.ajaxSetup({
    dataType: "json",
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    beforeSend: function(jqXHR, settings) {
        if(settings.type == "GET")
            settings.data = $.extend(settings.data, { ... });
        return true;
    }
});

jqXHR 문서

사용 가능한 설정뿐만 아니라 설명서도 보내기

제가 이 블라인드를 코딩했으니 올바른 방향으로 나아가길 바랍니다.

언급URL : https://stackoverflow.com/questions/6996993/jquerys-ajaxsetup-i-would-like-to-add-default-data-for-get-requests-only

반응형