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

我已经搜索了Google-verse,并拥有了die() PHP回调上的函数,我相信add_actions是正确的。

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

在chrome开发人员区域中收到200 OK消息。

我还从http:/测试了基本的AJAX。 /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();


}


/>

评论

您是否已验证ajaxurl设置正确?

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

jQuery('。cl_link_buttons')。val('id')。click(function()看起来很奇怪。

安德鲁,是的,我相信这是正确的,Chrome浏览器检查器中的请求网址显示的是domain / wp-admin / admin-ajax.php

@s_ha_dum没有错误显示

#1 楼

0响应表示未设置操作(在ajax数据中)或找不到操作的回调函数。

评论


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

–混合Web开发
2014年5月11日在20:26

或者您只是在处理ajax请求的php中没有故意返回任何内容。确保回显某些内容,否则,请使用.always进行捕获。

–所罗门·克洛森(Solomon Closson)
15-10-26在17:12

#2 楼

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

在这里查看原因和更多信息:http://codex.wordpress.org/AJAX_in_Plugins

注意:


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


评论


这是WP AJAX 0问题的答案。

– TR3B
2014年3月26日15:59

实际上,如果只添加die()而不回显任何内容,这也会给您500内部服务器错误,并为wp-admin / admin-ajax.php返回0。即使您只是设置值而无需返回任何内容,也应始终回显某些内容。否则,如果什么也没有回声并且die()消失,则必须使用.always()捕获它,因为它将不在.done()中,而将在.fail()中,因为它死掉时没有任何错误= 500错误。

–所罗门·克洛森(Solomon Closson)
15年10月26日在17:05

您是否有一些链接或工作代码,以便我们看一下? @SolomonClosson

–弗朗西斯科·科拉莱斯·莫拉莱斯(Francisco Corrales Morales)
2015年10月26日在17:18

我所有的答案均已在现场环境中进行了测试。测试它非常简单,只需执行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)
15-10-26在19:33



您会注意到,将显示“失败”,响应将是500 Internal Server Error。

–所罗门·克洛森(Solomon Closson)
15-10-26在19:38

#3 楼

所以我解决了。尽管我进行了改进,但并不是jQuery这样,而是回调函数的位置。我将其移至主插件文件,并且可以正常工作。

评论


你能证明你是怎么做到的吗?

–弗朗西斯科·科拉莱斯·莫拉莱斯(Francisco Corrales Morales)
2014年1月27日20:39

我遇到了同样的问题,能否请您说明如何解决此问题?

–杰里米
2014年8月8日在18:31

另一个答案在这里:wordpress.stackexchange.com/a/131397 @Jeremy

–弗朗西斯科·科拉莱斯·莫拉莱斯(Francisco Corrales Morales)
2014年3月26日在16:22

#4 楼

我有同样的问题。并解决了。您必须像示例中那样发送“操作”变量:

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中是操作变量的处理程序: br />
if ( empty( $_REQUEST['action'] ) ) {...}
Line 26


评论


OP确实发送了一个动作参数。尽管这可能对您有用,但这不是这里的问题。

– s_ha_dum
2014年5月11日在20:19

#5 楼

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

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


#6 楼

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

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


我发现您的JavaScript代码有很多错误,这可能就是原因。

评论


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

–阿皮娜(Apina)
13年4月27日在17:34

您的网站正在运行吗?

–奥马尔·阿比德(Omar Abid)
13年4月27日在17:35

不,这是本地主机

–阿皮娜(Apina)
13年4月27日在17:36

很难说。您可以尝试运行console.info(ajaxurl);看看它能给什么?

–奥马尔·阿比德(Omar Abid)
13年4月27日在17:37

尝试用'localhost / wp-admin / admin-ajax.php'替换ajaxurl,看看它能提供什么

–奥马尔·阿比德(Omar Abid)
2013年4月27日18:57



#7 楼

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
18 Mar 22 '18在4:52

重要:$ date = isset($ _ POST ['date'])吗? $ _POST ['date']:0;和功能die();

– Ngocheng
18-3-22在6:35



#8 楼

我有同样的问题,要解决此问题,我在函数wp_die()之后使用了echo。不要忘记对脚本传递操作。

请确保检查您的函数是否必须使用wp_ajax_nopriv,例如wp_ajax

#9 楼

仅供参考,对于任何在这里使用谷歌搜索“ ajax请求返回0”的人: br />
如果无法在public之外调用您的方法,则add_action只会静音。

#10 楼

如果您不使用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
});


#11 楼

那些得到错误0的人:),action =>'action'

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

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


#12 楼

如果您使用的是本地主机,并且您的php服务器端代码位于插件文件中,请首先登录到管理信息中心并刷新插件页面。其次,检查插件是否已激活。然后转到前端并刷新,然后尝试再次发送。

#13 楼

YOU TRY:

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' => __('')
    ));
}
// Action is: 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();
}

/**
 * Short code in page like this: [ly-form]
 * @param type $atts
 * @param type $content
 * @return string
 */
function ly_form_shortcode($atts, $content = "") {
    echo html_form_code();
}
add_shortcode('ly-form', 'ly_form_shortcode');

//HTML Form will show,
function html_form_code() {
    $html = "";
    $html.= '';
    $html.= '';

    $html.= '        Họ đệm * ';
    $html.= '        Tên * ';
    $html.= '        Địa chỉ * ';
    $html.= '        Email * ';
    $html.= '        Nội dung * dg';
    $html.= '        ';

    $html.=  '';
    $html.= '';
    $html.= '';


    return $html;
}

AND HERE js (ly-script.js):
( function( $ ) {
    $(document).ready(function () {
        // Perform AJAX form submit
        $('form.ly-form-ex').on('submit', function(e){
            e.preventDefault();
            $('#loading').html('loading...');
            var dataString = {action:'contact_ajax'};
            $.ajax({
                type: "POST",
                url: ly_form_ajax_object.ajaxurl,
                data: dataString,
                success: function (data) {
                    $('#loading').html(data);
                },
                error: function (errorThrown) {
                    alert(errorThrown);
                }

            });
        });
    }); // end ready
} )( jQuery );


希望对您有帮助,最好

评论


您可能要解释原因:)

– kaiser
17年3月22日在9:09

底线可能是ob_clean();功能。你可以做和体验

– Ly Van Vu
17 Mar 24 '17 4:20



#14 楼

尝试添加if语句:

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

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


//your coded function


die();
}



}// end function


评论


那将如何解决问题?请注意接受的答案和原始代码。

– fuxia♦
2013年9月23日在2:28