simple jquery.ajax返回undefined

时间:2013-01-28 17:57:27

标签: jquery ajax wordpress undefined

我知道这些到处都是,但我似乎无法在代码中看到错误。我正在使用数据类型json进行简单的ajax调用。此调用似乎成功,但不返回任何内容,警报打印undefined

的javascript:

jQuery(document).ready(function() {
    if(jQuery('#statesel').length) {
        var dataString;

        dataString = "nonce=" + dynoselect.post_dyno_select_nonce;
        jQuery.ajax({
            type: "POST",
            url: dynoselect.ajaxurl,
            dataType: "json",
            data: dataString,
            success: function(result) {
                alert(result.status);
            }
        });
    }
}

PHP:

<?php
add_action("init", "ci_enqueuer");
add_action("wp_ajax_dyno_select", "dyno_select");
add_action("wp_ajax_nopriv_dyno_select", "dyno_select");

function ci_enqueuer() {
    wp_register_script('dyno_select_script', plugins_url('/js/dyno_select_script.js', __FILE__), array('jquery'));
    wp_localize_script('dyno_select_script', 'dynoselect', array('ajaxurl' => admin_url('admin-ajax.php'), 'post_dyno_select_nonce' => wp_create_nonce('dyno_select_nonce')));
    wp_enqueue_script('jquery');
    wp_enqueue_script('dyno_select_script');
}

function dyno_select() {
    $nonce = $_POST['nonce'];

    //checking token, looking for funny business
    if (!wp_verify_nonce( $nonce, 'dyno_select_nonce')) {
        $result['status'] = 'nonce failed';
        $result = json_encode($result);
        echo $result;
        die();
    }

    $result['status'] = 'success';
    echo json_encode($result);
    die();
}
?>

正如注意到这是使用Wordpress,因此init功能。我以为我会保持这个目标。

3 个答案:

答案 0 :(得分:0)

jQuery.ajaxsuccess回调的3个参数。第一个是具有指定类型的数据(在您的示例中为JSON)。所以它没有地位属性。

此外,当您获得成功警报时,这意味着Content-type已正确设置并且是有效的JSON对象。

尝试使用:

success: function(result, status, XHR) {
     alert(XHR.status);
}

答案 1 :(得分:0)

该JSON参数字符串看起来不起作用。呼叫是否正确发布到服务器?

如果是,请忽略这一点。

如果没有,我建议在调用jQuery.ajax之前包括json2.js(http://www.json.org/js.html)和字符串化你的数据参数:

var jsonData = { param1: 'something', param2: 999 };
var dataString = JSON.stringify(jsonData);

修改 此接受的SO answer中的示例不进行字符串化,但它构造并传递有效的JSON对象。并显示服务器端解析。

答案 2 :(得分:0)

问题是POST没有和ajax调用一起传递“action”。一旦“动作”被添加到网址,一切正常。