simple jquery.ajax返回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:

  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函数。 我以为我会保持这个目标。

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

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

尝试使用:

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

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

如果是,请忽略这一点。

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

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

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

问题是POST没有通过“动作”和ajax调用。 一旦“动作”添加到url,一切都有效。