Admin Ajax mengembalikan 0

28

Saya relatif baru untuk jQuery dan AJAX pada khususnya. Saya punya masalah kecil dengan nilai pengembalian selalu menjadi 0, meskipun saya pikir ini sebenarnya pesan sukses dan tidak mengembalikan apa pun.

Saya telah menjelajahi Google-ayat dan saya memiliki fungsi die () pada panggilan balik PHP dan saya percaya add_actions sudah benar.

Saya bekerja pada host lokal, meskipun saya ragu itu mempengaruhi dan ini semua ada di admin, bukan front end. Saya juga memeriksa bahwa js enqueued dan dilokalkan.

Saya mendapatkan 200 pesan OK di area pengembang chrome.

Saya juga menguji AJAX dasar dari http://codex.wordpress.org/AJAX_in_Plugins dan juga mengembalikan 0, yang membuat saya bertanya-tanya apakah itu sesuatu selain kode yang diuraikan di bawah ini.

Saat ini saya hanya mencoba membuatnya mengirim sesuatu kembali ke jQuery. Bantuan apa pun akan dihargai.

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();


}
Apina
sumber
1
Sudahkah Anda memverifikasi bahwa ajaxurl diatur dengan benar?
Andrew Bartel
Apakah konsol browser Anda menunjukkan kesalahan? Jika demikian, apakah mereka?
s_ha_dum
2
jQuery('.cl_link_buttons').val('id').click(function()terlihat aneh.
fuxia
Andrew, ya saya yakin itu benar, url permintaan di Chrome Inspector menunjukkan domain / wp-admin / admin-ajax.php
Apina
@s_ha_dum Tidak ada kesalahan yang menunjukkan
Apina

Jawaban:

40

Sebuah 0respon berarti baik bahwa tindakan tidak diatur (dalam data ajax) atau bahwa fungsi callback tindakan ini tidak dapat ditemukan.

helgatheviking
sumber
2
Ya, ini jawaban yang benar. Semua menambahkan die () ke akhir tidak, adalah mengakhiri skrip. Jawaban itu secara teknis benar jika Anda melihat 0 ditambahkan ke AKHIR output, namun jika yang Anda dapatkan adalah '0', maka itu berarti tidak ada yang dikembalikan, dan Anda memiliki kesalahan seperti yang dijelaskan dalam jawaban ini.
Web Hibrid
Atau Anda tidak mengembalikan apa pun dengan sengaja di php yang menangani permintaan ajax. Pastikan untuk menggemakan sesuatu, jika tidak, gunakan .alwaysuntuk menangkapnya.
Solomon Closson
20

Yang harus Anda lakukan adalah menambahkan die();di akhir fungsi Anda.

Lihat alasannya dan lainnya di sini: http://codex.wordpress.org/AJAX_in_Plugins

Catatan:

  • Anda harus melakukan echosesuatu sebelum mengeksekusi die. Ini akan mencegah kesalahan server, dan akan membantu saat debugging.
Francisco Corrales Morales
sumber
7
Ini adalah jawaban untuk masalah WP AJAX 0.
Ben Racicot
Sebenarnya, jika Anda hanya menambahkan die()tanpa bergema sesuatu, ini juga akan memberikan internal Server Error 500, dan kembali 0untuk wp-admin/admin-ajax.php. Anda harus selalu menyuarakan sesuatu, bahkan jika Anda hanya menetapkan nilai dan tidak ada yang perlu dikembalikan. Kalau tidak, jika Anda tidak menggemakan apa-apa dan die(), Anda harus menggunakannya .always()untuk menangkapnya, karena tidak akan ada di .done()dalamnya, itu akan ada di dalam .fail()karena ia mati tanpa apa-apa = 500 Kesalahan.
Solomon Closson
apakah Anda memiliki beberapa tautan, atau kode kerja, sehingga kami dapat melihatnya? @SolomonClosson
Francisco Corrales Morales
Semua jawaban saya telah diuji di lingkungan langsung. Sangat mudah untuk menguji ini, cukup lakukan die();fungsi ajax dalam functions.phpfile tanpa menggemakan apa pun sebelum ini, dan panggil aksi melalui ajax, misalnya: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
Anda akan melihat, Gagal akan muncul, responsnya akan menjadi 500 Server Internal Kesalahan.
Solomon Closson
2

Jadi saya mengatasinya. Itu bukan jQuery karena meskipun saya telah meningkatkan itu, itu adalah penempatan fungsi panggilan balik. Saya memindahkannya ke file plugin utama dan berhasil.

Apina
sumber
4
dapatkah Anda menunjukkan bagaimana Anda melakukannya?
Francisco Corrales Morales
1
Saya mengalami masalah yang sama, dapatkah Anda menunjukkan bagaimana Anda memperbaikinya?
Jeremy
Jawaban lain ada di sini: wordpress.stackexchange.com/a/131397 @ Jeremy
Francisco Corrales Morales
2

Saya punya masalah yang sama. Dan memecahkannya. Anda harus mengirim variabel "aksi" seperti misalnya:

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");            
        }
    });

Karena di wp-admin / admin-ajax.php adalah penangan untuk variabel tindakan:

if ( empty( $_REQUEST['action'] ) ) {...}
Line 26
Mcart
sumber
4
OP memang mengirim actionparameter. Meskipun ini mungkin berhasil bagi Anda, itu bukan masalah di sini.
s_ha_dum
1

Coba jalankan kode ini di konsol

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

Saya dapat melihat banyak hal yang salah tentang kode JavaScript Anda dan itu mungkin menjadi alasannya.

Omar Abid
sumber
Yah itu datang dengan banyak hal yang saya tidak sepenuhnya mengerti. Apa yang saya mengerti: ReadyState 4, status 200, responseText "0". Dan kemudian muncul dengan respons 0. Jika ada sesuatu yang spesifik yang harus saya cari di sini? Jika ada masalah dengan kode, harap tunjukkan dan saya bisa melihatnya, saya masih belajar jQuery.
Apina
apakah situs Anda berjalan langsung?
Omar Abid
Tidak, ini localhost
Apina
Sulit dikatakan. Bisakah Anda mencoba menjalankan console.info (ajaxurl); dan lihat apa isinya?
Omar Abid
1
coba ganti ajaxurl dengan ' localhost / wp-admin / admin-ajax.php ' dan lihat apa hasilnya
Omar Abid
1

Saya memiliki masalah ini juga, dan itu adalah fakta yang saya gunakan returnalih-alih echodalam fungsi PHP saya. Mengubahnya untuk echomemperbaikinya.

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

Saya memiliki masalah yang sama, untuk memperbaikinya saya gunakan wp_die()di akhir fungsi saya hanya setelah echo. Jangan lupa menyampaikan tindakan Anda pada skrip Anda.

Yang pasti, periksa apakah fungsi Anda harus menggunakan wp_ajax_noprivlike wp_ajax.

Yann J
sumber
0

Hanya untuk referensi, bagi siapa saja yang pergi ke sini, googling "permintaan ajax kembali 0": Ingat ketika Anda menambahkan tindakan ajax ke metode objek untuk memastikan metode pengubah akses public.

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

add_actiondiam saja jika tidak bisa memanggil metode Anda di luar $object.

Marecky
sumber
0

Jika Anda tidak menggunakan fungsi wp_localize_script () untuk mengatur url ajax, admin ajax mengembalikan 0. Saya pikir itu adalah bug Wordpress. Berikut ini sebuah contoh:

    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' ) );

File 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
});
FRANCOIS Alain-Aymerick
sumber
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')
            }
            });
     });
}); 

// fungsi kode 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();
    }
?>
Ngocheng
sumber
Hanya memposting kode tidak baik, bisakah Anda menjelaskan apa yang dilakukan oleh kode ini?
bravokeyl
penting: $ date = isset ($ _ POST ['date'])? $ _POST ['date']: 0; Dan fungsi mati ();
Ngocheng
0

Mereka yang mendapatkan kesalahan 0 :), action => 'action'

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

$.post(ajaxurl, data, function(response) { alert(response); });
Savaş Hasçelik
sumber
-1
ANDA MENCOBA:

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-form-ajax-script');

    wp_localize_script ('ly-form-ajax-script', 'ly_form_ajax_object', array (
        'ajaxurl' => admin_url ('admin-ajax.php'),
        'redirecturl' => home_url (),
        'loadingmessage' => __ ('')
    ));
}
// Aksi adalah: 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 ();
}

/ **
 * Kode pendek di halaman seperti ini: [ly-form]
 * @param ketik $ atts
 * @param ketik $ content
 * @ mengembalikan string
 * /
function ly_form_shortcode ($ atts, $ content = "") {
    echo html_form_code ();
}
add_shortcode ('ly-form', 'ly_form_shortcode');

// Formulir HTML akan ditampilkan,
function html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

H * đệm *

'; $ html. = '

Tu *

'; $ html. = '

Ỉa chỉ *

'; $ html. = '

Email *

'; $ html. = '

Nội dung * dg

'; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; kembalikan $ html; } DAN DI SINI js (ly-script.js): (fungsi ($) { $ (dokumen) .ready (function () { // Lakukan pengiriman formulir AJAX $ ('form.ly-form-ex'). on ('submit', function (e) { e.preventDefault (); $ ('# loading'). html ('loading ...'); var dataString = {action: 'contact_ajax'}; $ .ajax ({ ketik: "POST", url: ly_form_ajax_object.ajaxurl, data: dataString, sukses: fungsi (data) { $ ('# loading'). html (data); }, error: function (errorThrown) { lansiran (errorThrown); } }); }); }); // berakhir siap }) (jQuery);

Semoga bermanfaat bagi Anda, Terbaik

Ly Van Vu
sumber
Anda mungkin ingin menjelaskan alasannya :)
kaiser
Intinya di sini mungkin ob_clean (); fungsi. Anda dapat melakukan dan mengalami
Ly Van Vu
-2

Coba tambahkan ifpernyataan:

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

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


//your coded function


die();
}



}// end function
xtianity
sumber
1
Bagaimana itu memecahkan masalah? Perhatikan jawaban yang diterima dan kode aslinya.
fuxia