하나의 양식 제출에서 두 개의 ajax 콜백을 달성 할 수있는 방법을 알고 싶습니다. 가능합니까? 그리고 어떻게합니까?
답변
아니요, 불가능합니다. 왜 그럴까요? Ajax 콜백은 AJAX 래퍼를 대체하기 위해 HTML 조각을 반환 할 수 있습니다. 2 개를 부르면 Drupal이 사용하는 것은 무엇입니까? 어떻게 결정해야합니까? 이것이 바로 #ajax["callback"]
가 이름 배열이 아닌 함수 이름으로 정의되는 이유입니다. 그런 문제를 피할 수 있습니다.
AJAX 이벤트에 대한 응답으로 두 개의 함수를 호출해야하는 경우 첫 번째 단락에서 요청한 로직을 포함하는 콜백을 작성하고 해당 콜백에서 필요한 함수를 호출합니다. .
답변
직접 할 수는 없습니다. 대신 다른 두 함수를 호출하는 함수를 사용하세요.
"#ajax" => array( "callback" => "my_callbacks_wrapper", ) ...
그런 다음 :
my_callbacks_wrapper($form, $form_state) { $first_callback_processed_form = first_callback($form, $form_state); $second_callback_processed_form = second_callback($first_callback_processed_form, $form_state); return $second_callback_processed_form; }
콜백이 방해하지 않는지 확인하세요.
댓글
- 찬성 투표를합니다. 또한 Ajax 콜백이 배열 : return array (' #type ' = > ' ajax ', ' #commands ' = > $ commands); 첫 번째 콜백을 호출하는 것이 ' 더 간단 할 수 있습니다. 그런 다음 호출하는 대신 #commands 배열에 값을 추가합니다. 두 번째 콜백입니다. 중복 기능 일 수도 있지만 전체 콜백이 ' 필요하지 않을 수도 있습니다.
- 예, 맞습니다. exmaple은 매우 간단하지만 ' 다시 병합하는 것이 좋습니다. 두 기능의 결과. 그러나 두 가지 기능을 사용하는 것은 해킹이라는 것을 명심하십시오.
- @tunic-> 두 개의 래퍼 요소를 가질 수 있습니까?