wp_ajax
-
-
http://www.example.com/wp-admin/admin-ajax.php?action=myAjaxFunc로 이동하면 무엇이 표시됩니까?What do you see when you go to http://www.example.com/wp-admin/admin-ajax.php?action=myAjaxFunc
- 0
- 2014-11-17
- czerspalace
-
질문에 진전이 있습니까?후속 조치를 주시겠습니까?Any progress on your question? Could you please follow up?
- 0
- 2015-04-15
- kaiser
-
오 ... 이것은 5 개월 전의 것입니다 ... 나는 다음날 BODA82 답변을 사용하여 게시 한 방식으로 내 질문에 답했습니다. 정답으로 표시하지 않았습니다.@toscho는 어제 훨씬 늦게 후속 조치를 추가했습니다. 그의 답변이 지금도 좋은지 확인할 수 없습니다.oh... this is from 5 months ago... I did answer to my own question by the way the next day I posted it, using bits of BODA82 answer - I just didn't marked it as the correct answer; @toscho added his follow up much later yesterday I can't verify if his answer is also good now, it makes sense though
- 0
- 2015-04-16
- unfulvio
-
3 대답
- 투표
-
- 2014-11-18
BODA82의 답변 이 도움이되었지만 결국 JavaScript 코드에서
responseText
를responseJSON
메서드로 대체해야한다는 것을 깨달았습니다. 아래 예에서는 Ajax 응답 결과를 변수에 저장했습니다. JSON으로 응답을받는 특정 방법이 있는지 몰랐습니다. 이러한 방식으로get_posts()
결과가있는 객체/배열은 문자열이 아닌 올바르게 반환됩니다.posts = $.ajax({ type: 'GET', url: ajaxurl, async: false, dataType: 'json', data: { action : 'getHotelsList' }, done: function(results) { // Uhm, maybe I don't even need this? JSON.parse(results); return results; }, fail: function( jqXHR, textStatus, errorThrown ) { console.log( 'Could not get posts, server response: ' + textStatus + ': ' + errorThrown ); } }).responseJSON; // <-- this instead of .responseText
자신을위한 메모와 일반적인 조언 : 저녁에 문제를 해결할 수 없다면 잠자리에 들고 책을 읽고 별을 세야한다는 신호입니다. 다음날 아침에 답을 찾을 수 있습니다. 빠를수록 좋습니다. : D
BODA82's answer helped, but eventually I realized that I should have replaced
responseText
withresponseJSON
method in my JavaScript code. In the example below I was storing the Ajax response results in a variable. I didn't know there was a specific method to get the response in JSON. In a such way the object/array withget_posts()
results is returned correctly and not as a string:posts = $.ajax({ type: 'GET', url: ajaxurl, async: false, dataType: 'json', data: { action : 'getHotelsList' }, done: function(results) { // Uhm, maybe I don't even need this? JSON.parse(results); return results; }, fail: function( jqXHR, textStatus, errorThrown ) { console.log( 'Could not get posts, server response: ' + textStatus + ': ' + errorThrown ); } }).responseJSON; // <-- this instead of .responseText
Note to self, but also general advice: if you can't fix something in the evening it's a sign you should go to bed, read a book, and count stars. An answer will be found the next morning, the earlier the better :D
-
- 2014-11-17
거의 PHP 기능이 있습니다. 헤더를 설정할 필요가 없습니다. (편집 : 또한
get_posts()
가 실제로 결과를 반환한다고 가정합니다.)function myAjaxFunc() { $posts = get_posts( array( 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', 'post_type' => 'my-post-type', 'post_status' => array( 'publish', 'draft' ) ) ); $list = array(); foreach ( $posts as $post ) { $list[] = array( 'id' => $post->ID, 'name' => $post->post_title, 'link' => get_permalink( $post->ID ), ); } echo json_encode( $list ); die; } add_action( 'wp_ajax_nopriv_myAjaxFunc', 'myAjaxFunc' ); add_action( 'wp_ajax_myAjaxFunc', 'myAjaxFunc' );
자바 스크립트 :
$.ajax({ url: "<?php bloginfo('url'); ?>/wp-admin/admin-ajax.php", type: "POST", data: "action=myAjaxFunc", success: function(results) { var posts = JSON.parse(results); console.log(results); $.each(posts, function() { $('#someSelect').append( $('<option></option>').text(this.name).val(this.id) ); }); }, error: function() { console.log('Cannot retrieve data.'); } });
Almost there with your PHP function. No need to set the header. (Edit: Also, assuming
get_posts()
is actually returning results.)function myAjaxFunc() { $posts = get_posts( array( 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', 'post_type' => 'my-post-type', 'post_status' => array( 'publish', 'draft' ) ) ); $list = array(); foreach ( $posts as $post ) { $list[] = array( 'id' => $post->ID, 'name' => $post->post_title, 'link' => get_permalink( $post->ID ), ); } echo json_encode( $list ); die; } add_action( 'wp_ajax_nopriv_myAjaxFunc', 'myAjaxFunc' ); add_action( 'wp_ajax_myAjaxFunc', 'myAjaxFunc' );
And your Javascript:
$.ajax({ url: "<?php bloginfo('url'); ?>/wp-admin/admin-ajax.php", type: "POST", data: "action=myAjaxFunc", success: function(results) { var posts = JSON.parse(results); console.log(results); $.each(posts, function() { $('#someSelect').append( $('<option></option>').text(this.name).val(this.id) ); }); }, error: function() { console.log('Cannot retrieve data.'); } });
-
JSON.stringify ()를 사용하여 일부 데이터를 저장 한 다음php.ini에서 읽어야 할 때다음 코드가 저에게 효과적이었습니다.json_decode (html_entity_decode (stripslashes ($jsonString)));When you save some data using JSON.stringify() and then need to read that in php. The following code worked for me. json_decode( html_entity_decode( stripslashes ($jsonString ) ) );
- 0
- 2019-12-04
- Vishal Tanna
-
- 2015-04-15
출구가 있습니다.
complete
또는success
대신done
사용 :posts = $.ajax({ type: 'GET', url: ajaxurl, async: false, dataType: 'json', data: { action : 'getHotelsList' }, complete: function(results) {
문제가 지속되면
async:false
를 제거하십시오.There is a way out. Use
complete
instead ofsuccess
ordone
:posts = $.ajax({ type: 'GET', url: ajaxurl, async: false, dataType: 'json', data: { action : 'getHotelsList' }, complete: function(results) {
And try to remove
async:false
if the problem persists.
WordPress 및 Ajax에 문제가 있습니다.
이것은 제 자바 스크립트 부분입니다 (조금 다듬 었습니다) :
내 PHP 코드는 다음과 같습니다.
스크립트는 admin-ajax로부터 Ajax 응답을받습니다. 불행히도 콘솔은 자바 스크립트 코드의
each
문에 도달하면 오류를 발생시킵니다. 다음과 같이 말합니다.내 "게시물"변수의 console.log를 수행하면 문자열 'Array'가 표시됩니다. PHP에서
$list
변수를 어떻게 전달하더라도 항상 문자열을 반환합니다. 쿼리는 다른 곳에서 게시물을 반환하므로 비어 있지 않습니다.json_encode
없이 헤더를 선언하거나 선언하지 않고wp_send_json()
을 사용하고 배열을 에코하기 전에ob_clean()
을 넣고 배열을 배열 ... 그러나 항상 문자열ajax
로Array
에 들어가며each
은 순환 할 수 없습니다.이것은 매우 간단해야하며 작동하지 않는 이유를 이해할 수 없습니다. 다른 JavaScript 또는 PHP 오류나 경고가 없으며 다른 모든 것이 정상적으로 실행됩니다.