管理员Ajax返回0


28

我对jQuery和AJAX特别陌生。我有一个小问题,返回值始终为0,尽管我认为这实际上是成功消息,但未返回任何内容。

我已经搜索过Google诗歌,并且在PHP回调中具有die()函数,并且我相信add_actions是正确的。

我正在本地主机上工作,尽管我怀疑这会影响它,而这一切都在管理员而非前端中。我还检查了js是否已入队和本地化。

在Chrome开发人员区域中,我收到200 OK消息。

我还从http://codex.wordpress.org/AJAX_in_Plugins测试了基本的AJAX,它还返回了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设置正确?
Andrew Bartel

浏览器控制台是否显示任何错误?如果是这样,它们是什么?
s_ha_dum 2013年

2
jQuery('.cl_link_buttons').val('id').click(function()看起来很奇怪
fuxia

安德鲁,是的,我认为这是正确的,Chrome Inspector中的请求网址显示的是domain / wp-admin / admin-ajax.php
Apina 2013年

@s_ha_dum没有错误显示
Apina 2013年

Answers:


40

0响应意味着要么(在AJAX数据),或动作的回调函数的动作没有被设置不能被发现。


2
是的,这是正确的答案。最后添加die()的所有操作都是终止脚本。如果您在输出的END后面看到0,则该答案在技术上是正确的,但是,如果您得到的全部是'0',则表示未返回任何内容,并且您有此答案中所述的错误。
Hybrid Web Dev

或者您只是在处理ajax请求的php中没有故意返回任何内容。确保回显某些内容,否则,使用.always它来捕获它。
所罗门·克洛森

20

您要做的是die();在函数的末尾添加。

在此处查看原因及更多信息:http : //codex.wordpress.org/AJAX_in_Plugins

笔记:

  • echo在执行之前,您应该执行一些操作die。这将防止服务器错误,并且在调试时会有所帮助。

7
这是WP AJAX 0问题的答案。
本·拉西科特

其实,如果你只需要添加die(),而不回显出来的东西,这也给你一个500内部服务器错误,并返回0wp-admin/admin-ajax.php。即使您只是设置值而无需返回任何内容,也应始终回显某些内容。否则,如果您什么也没有回声die(),则必须使用.always()它来捕获它,因为它不会进入.done(),它将进入,.fail()因为它死了没有任何错误= 500错误。
所罗门·克洛森

您是否有一些链接或工作代码,以便我们看一下?@SolomonClosson
弗朗西斯科·科拉莱斯·莫拉莱斯

我所有的答案均已在现场环境中进行了测试。测试它非常简单,只需die();functions.php文件的ajax函数中执行一个操作而不回显之前的任何内容,然后通过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 2015年

您会注意到,将显示“失败”,响应将是500 Internal Server Error。
所罗门·克洛森


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 2014年

1

尝试在控制台上运行此代码

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

我可以看到许多关于JavaScript代码的错误,这可能就是原因。


嗯,这带来了很多我不完全了解的事情。我的理解:ReadyState 4,状态为200,responseText为“ 0”。然后,它的响应为0。如果有特定的问题,我应该在这里寻找?如果代码有问题,请指出来,我可以研究一下,我仍在学习jQuery。
Apina

您的网站正在运行吗?
奥马尔·阿比德

不,它是本地主机
Apina

很难说。您可以尝试运行console.info(ajaxurl);吗?看看它能给什么?
奥马尔·阿比德

1
尝试更换ajaxurl与“ 本地主机/可湿性粉剂管理员/管理员-ajax.php ”,看看它给
奥马尔·阿比德

1

我也有这个问题,这是我在PHP函数中使用return而不是使用的事实echo。对其进行更改以进行echo修复。

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

0

我遇到了同样的问题,要解决我wp_die()在函数末尾紧接着使用的问题echo。不要忘记对脚本进行操作。

当然,请检查您的函数是否必须使用wp_ajax_noprivlike wp_ajax


0

仅供参考,对于任何到达此处谷歌搜索“ ajax请求返回0”的人:请记住,当您向对象的方法添加ajax操作时,请确保方法访问修饰符为public

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

add_action如果无法在之外调用您的方法,请保持沉默$object


0

如果您不使用wp_localize_script()函数设置ajax网址,则admin 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 ['date'])吗?$ _POST ['date']:0; 和功能die();
Ngocheng


-1
你试试:

add_action('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',array(
        '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');

函数my_function(){
    ob_clean();
    回声“ http://sanvatvungcao.com”;
    wp_die();
}

/ **
 *页面中的简短代码如下:[ly-form]
 * @参数类型$ atts
 * @参数类型$ content
 * @返回字符串
 * /
函数ly_form_shortcode($ atts,$ content =“”){
    回声html_form_code();
}
add_shortcode('ly-form','ly_form_shortcode');

// HTML表单将显示,
函数html_form_code(){
    $ html =“”;
    $ html。='';
    $ html。='';

    $ html。='        

Họm*

'; $ html。='

天*

'; $ html。='

Đị*

'; $ html。='

电邮*

'; $ html。='

牛粪* dg

'; $ html。=''; $ html。=''; $ html。=''; $ html。=''; 返回$ html; } 和这里js(ly-script.js): (函数($){ $(document).ready(function(){ //执行AJAX表单提交 $('form.ly-form-ex')。on('submit',function(e){ e.preventDefault(); $('#loading')。html('loading ...'); var dataString = {action:'contact_ajax'}; $ .ajax({ 输入:“ POST”, 网址:ly_form_ajax_object.ajaxurl, 数据:dataString, 成功:功能(数据){ $('#loading')。html(data); }, 错误:函数(errorThrown){ 警报(错误抛出); } }); }); }); //结束准备 })(jQuery);

希望对您有帮助,最好


您可能想解释原因:)
kaiser

底线可能是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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.