Admin Ajax возвращается 0


28

Я относительно новичок в JQuery и AJAX в частности. У меня есть небольшая проблема с возвращаемым значением, всегда равным 0, хотя я думаю, что это на самом деле сообщение об успехе, и оно ничего не возвращает.

Я просмотрел Google-стих и у меня есть функция die () в обратном вызове PHP, и я считаю, что add_actions верны.

Я работаю на локальном хосте, хотя я сомневаюсь, что это влияет на это, и это все в админке, а не в клиентской части. Я также проверил, что js поставлен в очередь и локализован.

Я получаю сообщение 200 OK в области Chrome Developer.

Я также протестировал базовый AJAX с http://codex.wordpress.org/AJAX_in_Plugins, и он также возвратил 0, что заставляет меня задаться вопросом, является ли это чем-то другим, кроме кода, описанного ниже.

Сейчас я просто пытаюсь заставить его отправить что-то обратно в jQuery. Любая помощь будет оценена.

JQuery

jQuery(document).ready(function(){
    jQuery('.cl_link_buttons').val('id').click(function() {

            var currentid = jQuery(this).attr('id');

            //alert(currentid);
            console.log(currentid);

            jQuery.ajax ( data = {
                action: 'cleanlinks_ajax_get_post_data',
                url: ajaxurl,
                type: 'POST',
                dataType: 'text',
                "currentid" : currentid

            });

            jQuery.post(ajaxurl, data, function(response) {

                var dataz = response;
                alert( dataz );
                console.log (dataz); //show json in console


            });

            return false;

    }); //end click event
}); //end doc ready

PHP

add_action("wp_ajax_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");
add_action("wp_ajax_nopriv_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");

function cleanlinks_ajax_get_post_data() {

$from_ajax =  $_POST['currentid'];

echo "do" . $from_ajax . "something";

die();


}

1
Вы убедились, что ajaxurl настроен правильно?
Эндрю Бартель

Консоль вашего браузера показывает ошибки? Если так, то кто они?
s_ha_dum

2
jQuery('.cl_link_buttons').val('id').click(function()выглядит странно
fuxia

Эндрю, да, я считаю, что это правильно, URL запроса в Chrome Inspector показывает домен / wp-admin / admin-ajax.php
Apina

@s_ha_dum Ошибки не отображаются
Апина

Ответы:


40

А 0означает ответ либо , что действие не установлено (в данном АЯКСЕ) или , что функции обратного вызова действия пользователя не может быть найдено.


2
Да, это правильный ответ. Все, что добавляет die () до конца, завершает работу скрипта. Этот ответ технически корректен, если вы видите 0, добавленный к КОНЦУ вывода, однако, если все, что вы получаете, это «0», то это означает, что ничего не было возвращено, и у вас есть ошибка, как описано в этом ответе.
Hybrid Web Dev

Или вы просто ничего не возвращали специально в php, который обрабатывает запрос ajax. Убедитесь, что что-то отражено, иначе используйте, .alwaysчтобы захватить это.
Соломон Клоссон

20

Что вам нужно сделать, это добавить die();в конце вашей функции.

Смотрите причину и многое другое здесь: http://codex.wordpress.org/AJAX_in_Plugins

Заметки:

  • Вы должны echoчто-то перед выполнением die. Это предотвратит ошибки сервера и поможет при отладке.

7
Это ответ на проблему WP AJAX 0.
Бен Рацикот

На самом деле, если вы просто добавить die()без вторя что - то, это также даст вам Ошибка 500 Internal Server, и вернуться 0к wp-admin/admin-ajax.php. Вы должны всегда что-то выводить, даже если вы просто устанавливаете значения и ничего не нужно возвращать. В противном случае, если вы ничего не die()получите, и вам придется использовать его .always()для захвата, потому что его не будет .done(), он будет, .fail()потому что он умирает без чего-либо = 500 Ошибка.
Соломон Клоссон

У вас есть ссылки или рабочий код, чтобы мы могли посмотреть? @SolomonClosson
Франциско Корралес Моралес

Все мои ответы были проверены в реальных условиях. Это очень просто проверить, просто сделайте a die();в функции ajax в functions.phpфайле, не выводя ничего перед этим, и вызовите действие через ajax, например:var testing = $.ajax( ... ); testing.fail(function(response) { console.log('Failed ' + response); }); testing.done(function(response) { console.log('Success ' + response); }); testing.always(function(response) { console.log('Ajax Request complete: ' + response); });
Solomon Closson

Вы заметите, Failed будет отображаться, ответ будет 500 Внутренняя ошибка сервера.
Соломон Клоссон

2

Так что я решил это. Это был не jQuery как таковой, хотя я улучшил это, это было размещение функции обратного вызова. Я переместил его в основной файл плагина, и он заработал.


4
можешь показать как ты это сделал?
Франциско Корралес Моралес

1
У меня такая же проблема, не могли бы вы показать, как вы это исправили?
Джереми


2

У меня та же проблема. И решил это. Вы должны отправить переменную "action", как в примере:

var dataString = {lat: '55.56', lng: '25.35', action:'report_callback'};
 $.ajax({                            
        url: "http://domain.net/wp-admin/admin-ajax.php",  
        type: "POST",
        //some times you cant try this method for sending action variable
        //action : 'report_callback',
        data:dataString,        
        success: function(data){ 
            console.log(data);

            },
        error: function() {
            console.log("Error");            
        }
    });

Потому что в wp-admin / admin-ajax.php есть обработчик для переменной действия:

if ( empty( $_REQUEST['action'] ) ) {...}
Line 26

4
OP делает отправить actionпараметр. Хотя это, возможно, сработало для вас, здесь не было проблемы
s_ha_dum

1

Попробуйте запустить этот код на консоли

jQuery.post(ajaxurl, {action:'cleanlinks_ajax_get_post_data'}, function(response) {
     console.log (response);
});

Я вижу много неправильного в вашем коде JavaScript, и это может быть причиной.


Ну, это придумывает много вещей, которые я не до конца понимаю. Что я понимаю: ReadyState 4, статус 200, текст ответа «0». И тогда приходит ответ 0. Если что-то конкретное мне следует искать здесь? Если есть проблемы с кодом, пожалуйста, укажите на них, и я могу посмотреть на них, я все еще изучаю jQuery.
Апина

у вас работает сайт?
Омар Абид

Нет, это localhost
Апина

Трудно сказать. Не могли бы вы попробовать запустить console.info (ajaxurl); и посмотри что это даст?
Омар Абид

1
попробуйте заменить ajaxurl на ' localhost / wp-admin / admin-ajax.php ' и посмотрите, что он дает
Омар Абид

1

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

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

0

У меня была та же проблема, чтобы исправить это я использовал wp_die()в конце своей функции сразу после echo. Не забудьте передать свое действие вашему сценарию.

Чтобы быть уверенным, проверьте, если ваша функция должна использовать wp_ajax_noprivкак wp_ajax.


0

Просто для справки, для тех, кто здесь прибегает к помощи, "запрос ajax возвращает 0": помните, когда вы добавляете действие ajax в метод объекта, чтобы быть уверенным, что модификатор доступа к методам есть public.

add_action( 'wp_ajax_my_action', [$object, 'my_method']);

add_actionпросто заставляет замолчать, если он не может вызвать ваш метод за пределами $object.


0

Если вы не используете функцию wp_localize_script () для установки URL-адреса ajax, администратор ajax возвращает 0. Я думаю, что это ошибка Wordpress. Вот пример:

    wp_enqueue_script( 'search_js', get_template_directory_uri() . '/js/search.js', array( 'jquery' ), null, true );    
    wp_localize_script( 'search_js', 'ajaxurl', admin_url( 'admin-ajax.php' ) );

Файл JavaScript (search.js):

    $('#search_input').autocomplete({
    source: function(request, response) {

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: ajaxurl,
            data: 'action=my_custom_action_search&search_criteria=' + request.term,
            success: function(data) {
                response(data);
            },
            error: function(errorThrown){
                console.log(errorThrown);
            } 
        });
    },
    minLength: 3
});

0
jQuery(document).ready(function(){
    jQuery('.cl_link_buttons').val('id').click(function() {
       $.ajax({
            type:'POST',
            url: ajaxurl,
            data: {
                action : 'ajax_filter',
                currentid : 'currentid'
            },
            success: function (result) {
                console.log(result);
                $result = $(result);
                        $result.fadeIn('7000');
                        $("#showresults").html(result);

            },
            error: function (xhr, status) {
                alert("Sorry, there was a problem!");
            },
            complete: function (xhr, status) {
                $('#showresults').slideDown('slow')
            }
            });
     });
}); 

// код функции php

<?php
    add_action( 'wp_ajax_nopriv_ajax_filter', 'ajax_filter' );
    add_action( 'wp_ajax_ajax_filter', 'ajax_filter' );
    function ajax_filter(){
        $date = isset($_POST['date']) ? $_POST['date'] : 0;
        echo $date;
        die();
    }
?>

Просто отправлять код нехорошо, не могли бы вы объяснить, что делает этот кусок кода?
Бравокейл

важно: $ date = isset ($ _ POST ['date'])? $ _POST ['date']: 0; И функция die ();
Нгоченг

0

Те, кто получает ошибку 0 :), action => 'action'

var data = { 'action': 'firmabilgilerikaydet', 'data': form_data };

$.post(ajaxurl, data, function(response) { alert(response); });

-1
ВЫ ПЫТАЕТЕСЬ:

add_action ('init', 'ly_form_ajax_init');


function ly_form_ajax_init () {
    wp_register_script ('ly-form-ajax-script', plugins_url (). '/ ly-form / js / ly-script.js', array ('jquery'));
    wp_enqueue_script ( 'LY-форм-Ajax-скрипт');

    wp_localize_script ('ly-form-ajax-script', 'ly_form_ajax_object', массив (
        'ajaxurl' => admin_url ('admin-ajax.php'),
        'redirecturl' => home_url (),
        'loadingmessage' => __ ('')
    ));
}
// Действие: contact_ajax
add_action ('wp_ajax_contact_ajax', 'my_function');
add_action ('wp_ajax_nopriv_contact_ajax', 'my_function');

function my_function () {
    ob_clean ();
    echo "http://sanvatvungcao.com";
    wp_die ();
}

/ **
 * Сокращенный код на странице вроде этого: [ly-form]
 * @param type $ atts
 * @param type $ content
 * возвращаемая строка
 * /
function ly_form_shortcode ($ atts, $ content = "") {
    echo html_form_code ();
}
add_shortcode ('ly-form', 'ly_form_shortcode');

// Форма HTML покажет,
function html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

Хм đệ м *

«; $ html. = '

Десять *

«; $ html. = '

Ỉа чỉ *

«; $ html. = '

Эл. адрес *

«; $ html. = '

Nội Dung * DG

«; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; вернуть $ html; } И ЗДЕСЬ js (ly-script.js): (функция ($) { $ (документ) .ready (function () { // Выполнение отправки формы AJAX $ ('form.ly-form-ex'). on ('submit', function (e) { e.preventDefault (); $ ( '# Загрузки') HTML ( 'загрузка ...'). var dataString = {action: 'contact_ajax'}; $ .Ajax ({ тип: "POST", url: ly_form_ajax_object.ajaxurl, data: dataString, success: function (data) { $ ( '# Загрузка') HTML (данные). }, error: function (errorThrown) { оповещения (errorThrown); } }); }); }); // конец готов }) (jQuery);

Надеюсь, это полезно для вас, Бест


Вы можете объяснить , почему :)
Кайзер

Нижняя строка здесь может быть ob_clean (); функция. Вы можете сделать и испытать
Ли Ван Ву

-2

Попробуйте добавить ifзаявление:

function my_function(){
$id = $_POST['variation_id'];

    if(isset($_POST['variation_id'])) { 


//your coded function


die();
}



}// end function

1
Как это решит проблему? Обратите внимание на принятый ответ и оригинальный код.
fuxia
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.