전송 시 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: [""] }
.
- 주의: 이것은 Rails의 일부 측면과 통합하려고 할 때, 특히 에 의해 관련된 오브젝트의 ID 목록을 전송할 때 작동합니다.
두 방법 모두 기대했던 것보다 더 진부하고 깔끔한 방법을 발견하게 되어 기쁩니다.
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
'programing' 카테고리의 다른 글
여러 콘텍스트에 대응 (0) | 2023.03.13 |
---|---|
스크립트를 대체하는 하위 테마용 wp_dequeue_script (0) | 2023.03.13 |
컨트롤러가 필요한 테스트 지침 (0) | 2023.03.13 |
콘텐츠 유형 'application/x-www-form-urlencoded;charset=UTF-8'은 @RequestBody MultiValueMap에서 지원되지 않습니다. (0) | 2023.03.08 |
Google-map-react에서 Google 지도에 마커 추가 (0) | 2023.03.08 |