programing

전송 시 JQuery가 빈 어레이를 삭제합니다.

codeshow 2023. 3. 13. 20:40
반응형

전송 시 JQuery가 빈 어레이를 삭제합니다.

다음 코드가 있습니다.

$.post('block_ajax.php'
    ,   {   'action': 'set_layout'
        ,   'listid': 123
        ,   'layout': []
        }
    ,   function(data) {
            // ...
        }
);

수신 스크립트(block_ajax.php)는 "action" 및 "listid" 파라미터만 수신합니다.Chrome을 사용하여 전송된 내용을 검사하면 "layout" 파라미터가 백엔드 스크립트로 전송되지 않습니다.

빈 배열과 없는 배열은 차이가 있기 때문에 JQuery에서 빈 배열을 보내 주셨으면 합니다.JQuery(1.6.1)가 이 작업을 수행하는 것으로 보이는 징후는 몇 가지 찾을 수 있지만 이를 막는 방법은 찾을 수 없습니다.JSON 포맷에서는 빈 어레이와 빈 오브젝트를 사용할 수 있기 때문에 가능하다고 생각합니다.

JQuery가 빈 어레이를 보낼 수 있도록 무엇을 변경해야 하는지 아는 사람이 있습니까?

우리 조직에는 이 문제에 대한 두 가지 접근법이 있습니다.

  • 데이터를 POST 데이터가 아닌 JSON으로 전송하는 것은 다목적 접근이지만, JSON 데이터를 디코딩하기 위해 명시적인 백엔드 호출을 추가해야 하므로 Rails와 같은 프레임워크와 통합하는 것이 다소 어려울 수 있습니다.
  • [""]vinod가 지적한 바와 같이, 많은 프레임워크(예: 레일)가 이를 빈 어레이로 취급하기 때문에 잘 작동합니다(이 이유는 이 스택 오버플로 답변을 참조하십시오).
    • 주의: 이것은 Rails의 일부 측면과 통합하려고 할 때, 특히 에 의해 관련된 오브젝트의 ID 목록을 전송할 때 작동합니다.has_many관계.예를 들면,foos테이블과 abars테이블 및foos has_many :bars through :foo_bars위의 모든 어소시에이션을 삭제하는 방법foo통과시키는 것이 목적foo: { bar_ids: [""] }.

두 방법 모두 기대했던 것보다 더 진부하고 깔끔한 방법을 발견하게 되어 기쁩니다.

2018년, 오래된 질문에 답해서 미안하지만, IMHO가 더 좋은 대답을 해드릴게요.

var arr = [];

$.post('block_ajax.php', {
    'action': 'set_layout',
    'listid': 123,
    'layout': arr.toString() // It'll be empty string "" if array is empty, otherwise if array has value(s) it will be a string of comma-separated values
}, function(data) {
    // ...
});

예:

var layout = [].toString();// layout will be '' (empty string)
var layout = [1,2,3].toString();// layout will be string with comma-separated values '1,2,3' 

백엔드에서는 빈 문자열이든 쉼표로 구분된 문자열이든 항상 게시되므로 배열로 변환하기만 하면 됩니다.

백엔드(PHP 예시):

$layout = explode(',', $_POST['layout']);

그런 경우에는 json이 도와줄 것 같다.

배열을 js로 인코딩하고 결과를 전송한 후 php로 디코딩합니다.

하지만 이것은 약간의 자원이 필요합니다.

이것을 시험해 보세요.

(isset($_POST['layout'])) ? $_POST['layout'] : array();

전달된 배열이 비어 있는 경우 새 빈 배열, 그렇지 않은 경우 데이터가 포함된 "실제" 배열로 가져옵니다.

나는 이것을 다음과 같이 풀었는데, 내가 가장 읽기 쉽다고 느낀다.배열이 있다고 가정하면myArray을 사용하다

'requestParam': myArray.length === 0 ? '' : myArray

경우에도 는 jQuery를 .requestParam★★★★★★ 。

간단한 속임수를 찾았어요

$.post('block_ajax.php'
    ,   {   'action': 'set_layout'
        ,   'listid': 123
        ,   'layout': [{}]
        }
    ,   function(data) {
            // ...
        }
);

을 '비우다'로 했습니다.[{}]jQuery ajaxs 。

의:[[]]동작하지 않습니다.

편집: 더 나은 솔루션에 대해서는 Luke의 답변을 참조하십시오.https://stackoverflow.com/a/31996181/827437

가 레일즈를 에 대한 이전 을 남겼습니다.[""]★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★


주의: 레일 고유의

왜 빈 파라미터를 보내야 하는지 모르겠습니다.PHP 스크립트에 파라미터가 존재하는지 확인하는 것만으로 충분합니다.단, 꼭 하고 싶다면'layout': [""]'layout': [] 파라미터가 송신됩니다.

이름을 바꿀 .layout로로 합니다.layout[]배열임을 나타냅니다만, 이것은 불필요합니다).

언급URL : https://stackoverflow.com/questions/6622224/jquery-removes-empty-arrays-when-sending

반응형