Ajax-вызов всегда возвращает 0

У меня проблема с возвратом AJAX 0 всегда!

Я все сделал по книге и не могу понять, что не так? Пожалуйста помоги!!

Вот мой вызов Ajax:

//Pass data through AJAX var amountToConvert = price; jQuery.ajax({ type:"POST", url: "../../wp-admin/admin-ajax.php", // our PHP handler file action: "ajaxConversion", data: { amount: amountToConvert }, success:function(data){ alert(data); }, error: function(errorThrown){ alert(errorThrown); } }); return false; 

И функция в functions.php:

 function ajaxConversion(){ $amount = mysql_real_escape_string($_POST['amount']); echo $amount; die(); }; add_action('wp_ajax_nopriv_ajaxConversion', 'ajaxConversion'); add_action('wp_ajax_ajaxConversion', 'ajaxConversion'); 

Не могли бы вы поместить действие (ajaxConversion) в свои данные и проверить?

 jQuery.ajax({ type:"POST", url: ajaxurl, data: { action: "ajaxConversion", amount: amountToConvert }, success:function(data){ alert(data); }, error: function(errorThrown){ alert(errorThrown); } }); 

используя wp_die(); в конце функции AJAX исправил проблему для меня.

например

 add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' ); function my_ajax_function(){ echo json_encode($myvar); wp_die(); } 

Для меня трюк заключался в том, чтобы добавить действие wp_ajax_nopriv . Я протестировал сценарий в одном браузере, когда я был зарегистрирован в WP admin, а затем я попробовал один и тот же скрипт в Chrome и понял, что скрипт не работает. После того, как я положил wp_ajax_nopriv , все приступило к работе. 🙂

 add_action( 'wp_ajax_nopriv_erase_uploaded_images', 'erase_uploaded_images' ); add_action( 'wp_ajax_erase_uploaded_images', 'erase_uploaded_images' ); function erase_uploaded_images() { $attach_id = filter_input( INPUT_POST, 'attach_id' ); wp_delete_attachment( $attach_id ); if ( isset( $_SESSION['uploaded_images'] ) ) { $array_attachments = $_SESSION['uploaded_images']; if ( ( $key = array_search( $attach_id, $array_attachments ) ) !== false ) { unset( $array_attachments[$key] ); } $_SESSION['uploaded_images'] = $array_attachments; } wp_die(); } 

Я бы рекомендовал использовать wp_send_json_success () и wp_send_json_error () на стороне сервера. Вам не нужно беспокоиться о die () и т. Д., А переменная «статус» отправляется автоматически, поэтому она намного чище. Например

 function ajaxConversion(){ // ... wp_send_json_success(array( 'amount' => $amount )); } 

Это приведет к чему-то вроде этого:

 { "success":true, "data":{"amount":125} } 

Итак, вы можете легко извлечь значения в свой вызов ajax:

 jQuery.ajax({ type : 'post', data : { action: 'ajaxConversion', //nonce : ajax.nonce }, dataType : 'json', url : ajax.ajaxurl, success : function(data){ if(data.success) { alert(data.amount); } else { alert(data.data.message); } } }); 

Еще одна распространенная вещь, с которой я столкнулся, – это опечатки в имени действия. Они должны быть wp_ajax_nopriv_ {action} или wp_ajax_ {action} при входе в систему. Например, wp-ajax_nopriv – это тот, который я делал несколько раз в прошлом.

Для меня это был тот факт, что я использовал return вместо echo в своей функции PHP. Изменение его, чтобы echo зафиксировать его.

 function doAjax() { $result = getPosts(); echo json_encode($result, true); die(); }