Адміністратор Аякс повертається 0


28

Я порівняно новачок у jQuery та AJAX зокрема. У мене є невелика проблема із значенням повернення, що завжди дорівнює 0, хоча я думаю, що це насправді повідомлення про успіх, і воно нічого не повертає.

Я проглянув Google-verse і в мене функція die () у зворотному звороті PHP, і я вважаю, що add_action є правильними.

Я працюю над локальним хостом, хоча я сумніваюся, що це впливає, і це все в адміністраторі, а не в передній частині. Я також перевірив, що js підключений та локалізований.

Я отримую повідомлення 200 ОК у зоні розробника хрому.

Я також перевірив базовий 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 помилок внутрішнього сервера та повернеться 0до wp-admin/admin-ajax.php. Ви завжди повинні щось повторювати, навіть якщо ви просто встановлюєте значення і нічого не потрібно повертати. В іншому випадку, якщо ви нічого не лунаєте, і die()вам доведеться використовувати його .always()для захоплення, тому що його не буде .done(), він буде в .fail()тому, що він гине без нічого = 500 помилок.
Соломон Клоссон

у вас є посилання чи робочий код, щоб ми могли подивитися? @SolomonClosson
Франциско Корралес Моралес

Усі мої відповіді були перевірені в живих умовах. Це перевірити дуже просто, просто виконайте 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); });
Соломон Клоссон,

Ви помітите: Помилка з’явиться, відповідь буде 500 помилкою внутрішнього сервера.
Соломон Клоссон

2

Тому я це розробив. Це був не jQuery як такий, хоча я це вдосконалив, це було розміщення функції зворотного дзвінка. Я перемістив його до основного файла плагінів, і він працював.


4
чи можете ви показати, як ви це зробили?
Франциско Корралес Моралес

1
У мене є те саме питання, чи можете ви показати, як це виправили?
Джеремі

Ще одна відповідь тут: wordpress.stackexchange.com/a/131397 @Jeremy
Francisco Corrales Morales

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, responseText "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

Тільки для довідки, для всіх, хто потрапляє сюди googling "запит 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();
    }
?>

Просто розміщення коду не годиться, чи можете ви поясніть, що робить цей фрагмент коду?
bravokeyl

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

0

Ті, хто отримує помилку 0 :), action => 'action'

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

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

-1
ТИ СПРОБУЙ:

добавлення ('init', 'ly_form_ajax_init');


функція 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-form-ajax-script');

    wp_localize_script ('ly-form-ajax-script', 'ly_form_ajax_object', масив (
        'ajaxurl' => admin_url ('admin-ajax.php'),
        'redirecturl' => home_url (),
        'loadingmessage' => __ ('')
    ));
}
// Дія: contact_ajax
добавлення ('wp_ajax_contact_ajax', 'моя_функція');
добавлення ('wp_ajax_nopriv_contact_ajax', 'my_function');

функція my_function () {
    ob_clean ();
    ехо "http://sanvatvungcao.com";
    wp_die ();
}

/ **
 * Короткий код на такій сторінці: [ly-form]
 * @param введіть $ atts
 * @param введіть $ content
 * рядок @return
 * /
функція ly_form_shortcode ($ atts, $ content = "") {
    echo html_form_code ();
}
add_shortcode ('ly-form', 'ly_form_shortcode');

// Показує форма HTML,
функція html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

Họ đệm *

'; $ html. = '

Tên *

'; $ html. = '

Địa chỉ *

'; $ html. = '

Email *

'; $ html. = '

Nội гній * dg

'; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; повернути $ html; } І ТУТ js (ly-script.js): (функція ($) { $ (документ) .ready (функція () { // Виконай подання форми AJAX $ ('form.ly-form-ex'). on ('подати', функція (e) { e.preventDefault (); $ ('# loading'). html ('завантаження ...'); var dataString = {дія: 'contact_ajax'}; $ .ajax ({ тип: "POST", URL: ly_form_ajax_object.ajaxurl, data: dataString, успіх: функція (дані) { $ ('# завантаження'). html (дані); }, помилка: функція (errorThrown) { оповіщення (errorThrown); } }); }); }); // кінець готовий }) (jQuery);

Сподіваюся, що це стане в нагоді для вас, Найкраще


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

Нижній рядок тут може бути ob_clean (); функція. Ви можете зробити і досвід
Ly Van Vu

-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.