为啥我的 ajax 请求得到响应 0?

Posted

技术标签:

【中文标题】为啥我的 ajax 请求得到响应 0?【英文标题】:Why is my ajax request getting response 0?为什么我的 ajax 请求得到响应 0? 【发布时间】:2013-10-22 14:35:45 【问题描述】:

我已经在我的 wp 主题中设置了基本的 wordpress ajax 示例。触发器是由modernizr.js 检查页面上的媒体查询产生的。

jQuery(document).ready(function($) 
    if(Modernizr.mq('only all and (max-width:6300px)')) 
        var data = 
        action: 'my_action',
        whatever: ajax_object.we_value      // We pass php values differently!
    ;
    // We can also pass the url value separately from ajaxurl for front end AJAX implementations
        jQuery.post(ajax_object.ajax_url, data, function(data) 
            $("#trending-Container").html(data).fadeIn(1000);
        );
    

);//end function 

我已将我的脚本本地化并排入队列。

wp_enqueue_script('mainJS', get_template_directory_uri() . '/js/mainJS.js', array("jquery") );
wp_localize_script( 'mainJS', 'ajax_object', 
                    array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );

最后处理请求的函数是:

add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
function my_action_callback() 
        global $wpdb;
            $whatever = intval( $_POST['whatever'] );
            $whatever += 10;
                echo $whatever;
            die();

        

这总是给我一个 0 的响应(没有属性),我不知道为什么。 P.S 这都是本地的。

Status code 200
Host:lart.co.uk
Origin:http://lart.co.uk
Referer:http://lart.co.uk/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
action:my_action
whatever:1234

【问题讨论】:

你能查一下exit(intval( $_POST['whatever'] ));吗? @RecoveringSince2003 你的意思是不是 die()?我试过了,还是没有。 尝试print_r($_POST);die(); 以确保$_POST 不为空,包含该值。 还是0,我删除了所有my_action_callback()函数,它响应为0。函数处理程序不是被add_action触发的吗? 它应该根据您发布的代码触发。 【参考方案1】:

这里的一切都必须匹配:

PHP

add_action('wp_ajax_my_action', 'my_action'); add_action('wp_ajax_nopriv_my_action', 'my_action'); 函数 my_action()

JS

变量数据 = 动作:'my_action', 随便:ajax_object.we_value ;

此外,您缺少安全检查和更好地处理响应。 检查以下示例:[ 1 ][ 2 ]

【讨论】:

还是什么都没有。我不认为其他“my_action”必须匹配并且可以只是函数的名称? 示例 #2 非常简单,您是否尝试过适应它? 啊,谢谢。查看示例 2 后,我能够调整代码并使其正确输出。无论如何谢谢:)【参考方案2】:

如下图添加函数的“exit”结尾,这将修复return 0与WordPress中使用ajax请求时的响应。

add_action('wp_ajax_nopriv_getStateList', 'getStateList');
add_action('wp_ajax_getStateList', 'getStateList');

function getStateList() 
    global $wpdb;
    $countryId = $_POST['countryId'];
    $results = $wpdb->get_results("SELECT id,name FROM regions where country_id ='".$countryId."' ");
    echo json_encode(array('status'=>200,'data'=>$results));
    exit;

【讨论】:

感谢您的回答。也许您可以添加一些解释来解决此问题的变化? 我已经编辑了cmets,你可以在上面看到。对于您的 FYI,这将停止返回 0,并在 WordPress 中使用 ajax 请求进行响应。【参考方案3】:

这是解决此问题的完整示例:

JavaScript:

$(document).ready(function() 
    $("#submit").click(function(e) 
        var demo = 'demo';
        var ajaxurl = '<?php echo admin_url("admin-ajax.php", null); ?>';
        data =  action: "data_insert", demo: demo;     
        $.ajax(
            url: ajaxurl,
            data: data,
            dataType: 'json',
            type: 'post',
            success: function(response) 
              console.log(response);  
            
        );
    );    
);

PHP:

add_action('wp_ajax_data_insert', 'data_insert');
add_action('wp_ajax_nopriv_data_insert', 'data_insert');
function data_insert() 
    $data = $_POST['demo'];
    echo json_encode($data);
    die();

【讨论】:

以上是关于为啥我的 ajax 请求得到响应 0?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法通过普通浏览器请求获得 ajax 请求的响应? [复制]

为啥浏览器对 OPTION 请求得到 200 响应和 503 响应?

为啥我的ajax在IE打开可以在谷歌和火狐打开就不响应请求

为啥我无法检索响应 jQuery AJAX 请求而插入的内容的计算高度?

为啥 AJAX 请求返回后浏览器不设置 cookie?

为啥我从这个请求 iOS JSON 得到空响应