Admin Ajax 0 döndürüyor


28

Özellikle jQuery ve AJAX için nispeten yeni. Ben her zaman 0 olmak üzere getiri değeri ile ilgili küçük bir sorunum var, bunun aslında başarı mesajı olduğunu ve hiçbir şey döndürmediğini düşünüyorum.

Google ayetini araştırdım ve PHP geri çağırmada die () işlevine sahibim ve add_actions'ın doğru olduğuna inanıyorum.

Yerel bir ev sahibi üzerinde çalışıyorum, bunu etkilediğinden şüpheliyim ve bunların hepsi yönetici değil, ön uç. Ayrıca js'nin sıkıştırılıp lokalize olduğunu kontrol ettim.

Krom geliştirici alanında 200 OK mesajı alıyorum.

Ayrıca, temel AJAX’i http://codex.wordpress.org/AJAX_in_Plugins’den test ettim ve 0 döndürdüm.

Şu anda sadece jQuery'ye bir şeyleri geri göndermesini sağlamaya çalışıyorum. Herhangi bir yardım takdir edilecektir.

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’un doğru şekilde ayarlandığını doğruladınız mı?
Andrew Bartel

Tarayıcı konsolunuz herhangi bir hata gösteriyor mu? Eğer öyleyse, bunlar nedir?
s_ha_dum

2
jQuery('.cl_link_buttons').val('id').click(function()garip görünüyor.
fuxia

Andrew, evet doğru olduğuna inanıyorum, Chrome Inspector’daki istek URL'si domain / wp-admin / admin-ajax.php gösteriyor
Apina

@s_ha_dum Gösteren hata yok
Apina

Yanıtlar:


40

Bir 0eylem eylemin geri arama fonksiyonu (ajax veri) veya ayarlanmamış ya bu tepki araçları bulunamaz.


2
Evet, doğru cevap bu. Tüm ekleme die () sonuna yapar, betiği sonlandırır. Çıktının END'sine 0 eklendiğini görüyorsanız, bu cevap teknik olarak doğrudur, ancak aldığınız her şey '0' ise, o zaman hiçbir şey döndürülmez demektir ve bu cevapta açıklandığı gibi bir hata oluşur.
Hibrid Web Dev

Veya sadece ajax isteğini yerine getiren php'da bilerek bir şey döndürmedin. Bir şeyi dışkıladığınızdan emin olun, aksi takdirde .alwaysyakalamak için kullanın .
Solomon Closson

20

Yapmanız gereken die();, fonksiyonunuzun sonuna eklemektir .

Sebebini ve daha fazlasını burada görün: http://codex.wordpress.org/AJAX_in_Plugins

Notlar:

  • echoYürütmeden önce bir şey yapmalısın die. Bu sunucu hatalarını önleyecektir ve hata ayıklama sırasında yardımcı olacaktır.

7
WP AJAX 0 sorununun cevabı budur.
Ben Racicot

Aslına bakarsan, sadece bir die()şeyi dışkılamadan eklerseniz , bu da size 500 Dahili Sunucu Hatası verir ve bunun 0için geri döner wp-admin/admin-ajax.php. Sadece değerleri ayarlasanız ve iade edilmesi gereken bir şey olmasa bile, her zaman bir şeyi yankılanmalısınız. Aksi takdirde, hiçbir şey yankılanmazsanız ve onu yakalamak die()için kullanmak zorundasınız .always(), çünkü içeride olmayacak .done(), içinde olacak .fail()çünkü hiçbir şey olmadan ölüyor çünkü = 500 Hata.
Solomon Closson

bazı bağlantılarınız veya çalışma kodunuz var, bu yüzden bir göz atabilir miyiz? @SolomonClosson
Francisco Corrales Morales

Tüm cevaplarım canlı ortamlarda test edildi. Bunu test etmek çok basit die();, functions.phpdosyadaki ajax işlevinde bir şey yapmadan önce bir şey yapmak ve eylemi ajax aracılığıyla çağırmak çok basit , örneğin: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

Farkedeceksiniz, Başarısız gösterilecek, yanıt 500 Dahili Sunucu Hatası olacaktır.
Solomon Closson


2

Bende de aynı problem var. Ve çözüldü. Örneğin "action" değişkeni göndermelisiniz:

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

Çünkü wp-admin / admin-ajax.php eylem değişkeni için işleyicidir:

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

4
OP yapar bir gönderme actionparametre. Bu sizin için işe yaramış olsa da, burada sorun değildi.
s_ha_dum

1

Konsolda bu kodu çalıştırmayı deneyin

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

JavaScript kodunuzla ilgili birçok şeyi yanlış görebiliyorum ve bunun nedeni bu olabilir.


Tamamen anlamadığım birçok şey var. Ne anlıyorum: ReadyState 4, durum 200, responseText "0". Ve sonra 0 cevabını buluyor. Spesifik olarak bir şey varsa burada aramalı mıyım? Kodla ilgili sorunlar varsa, lütfen bunları belirtin ve onlara bakabilirim, hala jQuery öğreniyorum.
Apina

Siteniz canlı yayınlanıyor mu?
Omar Abid,

Hayır, bu yerel ev sahibi
Apina,

Söylemesi zor. Console.info (ajaxurl) programını çalıştırmayı deneyebilir misiniz? ve ne verdiğini görüyor musun?
Omar Abid,

1
ajaxurl ile 'değiştirmeyi deneyin localhost / wp-admin / admin-ajax.php ' ve o verir ne olduğunu görmek
Ömer Abid

1

Ben de bu sorunu yaşadım ve PHP işlevim returnyerine kullandığım gerçekti echo. Bunu düzeltmek için değiştiriyorum echo.

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

0

Aynı sorunu yaşadım, düzeltmek için wp_die()fonksiyonumun sonunda kullandım echo. İşleminizi betiğinize geçirmeyi unutmayın.

Emin olmak için, fonksiyonunuzun wp_ajax_noprivbenzeri kullanmak zorunda olup olmadığını kontrol edin wp_ajax.


0

Yalnızca başvuru için, buraya "goja isteme isteği 0" döndürüyorsa, googling yapan herkes için: metodlara erişim değiştiricisinin olduğundan emin olmak için nesnenin metoduna ajax işlemi eklediğinizi unutmayın public.

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

add_actionsadece yöntemini dışına çağıramadığında sessizleşir $object.


0

Ajax URL'sini ayarlamak için wp_localize_script () işlevini kullanmazsanız, admin ajax 0 döndürür. Sanırım Wordpress hatası. İşte bir örnek:

    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 dosyası (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')
            }
            });
     });
}); 

// kod işlevi 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();
    }
?>

Sadece kod göndermek iyi değil, lütfen bu kod parçasının ne yaptığını açıklayabilir misiniz?
bravokeyl

önemli: $ date = isset ($ _ POST ['tarih'])? $ _POST ['tarih']: 0; Ve işlev die ();
Ngocheng

0

Hata :) almak isteyenler, action => 'action'

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

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

-1
SEN DENE:

add_action ('init', 'ly_form_ajax_init');


işlevi ly_form_ajax_init () {
    wp_register_script ('ly-form-ajax-script', plugins_url (). '/ ly-form / js / ly-script.js', dizi ('jquery'));
    wp_enqueue_script ( 'ly-form-ajax-komut');

    wp_localize_script ('ly-form-ajax-script', 'ly_form_ajax_object', dizi (
        'ajaxurl' => admin_url ('admin-ajax.php'),
        'redirecturl' => home_url (),
        'loadingmessage' => __ ('')
    ));
}
// Eylem: contact_ajax
add_action ('wp_ajax_contact_ajax', 'my_function');
add_action ('wp_ajax_nopriv_contact_ajax', 'my_function');

işlev my_function () {
    ob_clean ();
    yankı "http://sanvatvungcao.com";
    wp_die ();
}

/ **
 * Sayfadaki gibi kısa kod: [ly-form]
 * @param tipi $ atts
 * @param $ içerik
 * @return string
 * /
işlevi ly_form_shortcode ($ atts, $ content = "") {
    echo html_form_code ();
}
add_shortcode ('ly-form', 'ly_form_shortcode');

// HTML Formu gösterilecek,
işlevi html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

H *

'; $ html. = '

Tên *

'; $ html. = '

Địa chỉ *

'; $ html. = '

Email *

'; $ html. = '

N di gübre * dg

'; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; $ html döndürür; } AND HERE js (ly-script.js): (işlev ($) { $ (document) .ready (function () { // AJAX form gönderimini gerçekleştirin $ ('form.ly-form-ex'). on ('Gönder', işlev (e) { e.preventDefault (); $ ( '# Yükleme') html ( 'yükleniyor ....'); var dataString = {action: 'contact_ajax'}; {(.Ajax, $ tür: "POST", url: ly_form_ajax_object.ajaxurl, veri: dataString, başarı: işlev (veri) { $ ( '# Yükleme') html (veri).; }, error: function (errorThrown) { uyarısı (errorThrown); } }); }); }); // hazır }) (jQuery);

Umarım sizin için yararlı olur, En İyi


Nedenini açıklamak isteyebilirsin :)
kaiser

Buradaki alt çizgi ob_clean () olabilir; işlevi. Yapabilir ve deneyimleyebilirsiniz
Ly Van Vu

-2

Bir ififade eklemeyi deneyin :

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

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


//your coded function


die();
}



}// end function

1
Bu sorunu nasıl çözerdi? Kabul edilen cevabı ve orijinal kodu not edin.
fuxia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.