programing

jQuery .ajax() - POST 요청에 쿼리 매개 변수를 추가하시겠습니까?

newstyles 2023. 8. 22. 21:59

jQuery .ajax() - POST 요청에 쿼리 매개 변수를 추가하시겠습니까?

jQuery AJAX를 사용하여 URL에 쿼리 매개 변수를 추가하려면 다음 작업을 수행합니다.

$.ajax({
  url: 'www.some.url',
  method: 'GET',
  data: {
      param1: 'val1'
  }
)}

그 결과 다음과 같은 URL이 생성됩니다.www.some.url?param1=val1

방법이 POST일 때는 어떻게 해야 하나요?그럴 때면data더 이상 쿼리 매개 변수로 추가되지 않습니다. 대신 요청 본문을 구성합니다.

Ajax 요청 전에 수동으로 URL에 매개 변수를 추가할 수 있다는 것을 알고 있지만, Ajax 호출 전에 실행해야 할 ~5줄보다 짧은 명확한 방법을 놓치고 있다는 느낌이 들 뿐입니다.

jQuery.param()을 사용하면 직접 URL에 추가할 수 있는 쿼리 문자열로 개체의 속성을 직렬화할 수 있습니다.

$.ajax({
  url: 'http://www.example.com?' + $.param({ paramInQuery: 1 }),
  method: 'POST',
  data: {
    paramInBody: 2
  }
});

@Ates Goral에 대해 감사합니다.jQuery.ajaxPrefilter()팁. 내 문제는 내가 바꿀 수 없다는 것이었습니다.url할 수밖에 없었기 때문에kendoGrid그리고 백엔드 웹 API는 지원하지 않았습니다.kendoGrid의 서버 페이징 옵션(예:page,pageSize,skip그리고.take또한 백엔드 페이징 옵션은 다른 이름의 쿼리 매개 변수여야 합니다.그래서 부동산을 들여놓아야 했습니다.data사전 필터링을 트리거합니다.

var grid = $('#grid').kendoGrid({
    // options here...
    dataSource: {
        transport: {
            read: {
                url: url,
                contentType: 'application/json',
                dataType: 'json',
                type: httpRequestType,
                beforeSend: authentication.beforeSend,
                data: function(data) {
                  // added preFilterMe property
                  if (httpRequestType === 'POST') {
                      return {
                          preFilterMe: true,
                          parameters: parameters,
                          page: data.page,
                          itemsPerPage: data.pageSize,
                      };
                  }

                  return {
                      page: data.page,
                      itemsPerPage: data.pageSize,
                  };
              },
          },
        },
    },
});

보다시피,transport.read옵션은 다음에 대해 동일한 옵션입니다.jQuery.ajax()그리고 프리필터링 비트에서:

$.ajaxPrefilter(function(options, originalOptions, xhr) {
    // only mess with POST request as GET requests automatically
    // put the data as query parameters
    if (originalOptions.type === 'POST' && originalOptions.data.preFilterMe) {
        options.url = options.url + '?page=' + originalOptions.data.page 
            + '&itemsPerPage=' + originalOptions.data.itemsPerPage;

        if (originalOptions.data.parameters.length > 0) {
            options.data = JSON.stringify(originalOptions.data.parameters);
        }
    }
});

언급URL : https://stackoverflow.com/questions/43108096/jquery-ajax-add-query-parameters-to-post-request