0

我知道这些无处不在,但我似乎在我的代码中看不到错误。我正在使用数据类型 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函数。以为我会保留它以备不时之需。

4

3 回答 3

0

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

如果是,请忽略这一点。

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

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

编辑: 这个接受的SO 答案中的示例没有字符串化,但它确实构造并传递了一个有效的 JSON 对象。并显示服务器端解析。

于 2013-01-28T18:15:45.997 回答
0

问题是 POST 没有与 ajax 调用一起传递“动作”。将“动作”添加到网址后,一切正常。

于 2013-01-30T21:26:46.143 回答
0

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

此外,当您收到成功警报时,表示Content-type已正确设置并且是有效的 JSON 对象。

尝试使用:

success: function(result, status, XHR) {
     alert(XHR.status);
}
于 2013-01-28T18:05:32.457 回答