我知道这些到处都是,但我似乎无法在代码中看到错误。我正在使用数据类型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
功能。我以为我会保持这个目标。
答案 0 :(得分:0)
jQuery.ajax
有success
回调的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”。一旦“动作”被添加到网址,一切正常。