辩论是否将其放在WordPress.SE或此处;我决定,因为它主要是一个jQuery问题,所以我在这里发布它,注意它是在WordPress开发过程中发生的。
长话短说,关于如何在WordPress中使用AJAX的guide信件 - 包括粘贴相同的代码摘录,看看它们是否在我的开发服务器上运行。从未执行指定的PHP函数,当我将响应转储到输出div时,调用只返回0。
我在AJAX调用中添加了error:
字段并触发了,但除了显示存在错误之外,我无法弄清楚实际存在的问题。
在这里查看AJAX通话,如指南所示。
jQuery.ajax({
type : "post",
dataType : "json",
url : myAjax.ajaxurl,
data : {action: "my_user_vote", post_id : post_id, nonce: nonce},
success: function(response) {
if(response.type == "success") {
jQuery("#vote_counter").html(response.vote_count)
}
else {
alert("Your vote could not be added")
}
}
})
记得之前遇到过这个问题,我决定回顾一年前的一个旧项目,并找到了以下解决方法,这似乎做了同样的事情,但实际上从脚本中返回了正确的响应。
功能解决方法,做了预期的事情
var ajaxurl = '<?php bloginfo('url'); ?>/wp-admin/admin-ajax.php';
var data = {action: "my_user_vote", post_id : post_id, nonce: nonce};
// Handle any returned values
jQuery.post(ajaxurl, data, function(response) {
if(response.type == "success") {
jQuery("#vote_counter").html(response.vote_count)
}
else {
alert("Your vote could not be added")
}
});
从表面上看,后者似乎只是一种执行前者的漫长方式,但出于某种原因只有后者有效。 第一个阻止导致错误的原因是什么?
<小时/> 编辑:看起来这可能是一个WordPress问题。我已经把我正在工作的代码发送到了生产,所以为了重现它,我将它放入插件并尝试在默认主题上运行它。它在前端工作,但是当我将它带到后端页面时(当时我正在处理的工作),它无法正常工作。根据控制台,似乎是在后端排队脚本的问题。
为了缓解这个问题,我将以下内容转储到另一个空白的后端页面上:
This post has <div id='vote_counter'>0</div> votes<br>
<div id="output">Test</div>
<script>
jQuery(document).ready( function() {
jQuery(".user_vote").click( function() {
post_id = jQuery(this).attr("data-post_id")
nonce = jQuery(this).attr("data-nonce")
jQuery.ajax({
type : "post",
dataType : "json",
url : "<?php bloginfo('url'); ?>/wp-admin/admin-ajax.php",
data : {action: "my_user_vote", post_id : post_id, nonce: nonce},
success: function(response) {
jQuery("#output").html(response)
jQuery("#vote_counter").html(5)
},
error: function(response) {
jQuery("#output").html(response)
jQuery("#vote_counter").html(10)}
})
})
})
</script>
<?php
$link = admin_url('admin-ajax.php?action=my_user_vote');
echo '<a class="user_vote" href="' . $link . '">vote for this article</a>';
长话短说:不再有任何外部脚本排队,链接直接编码到其中,计数应该在成功时更新为5或在失败时更新为10(因为这是一个后端页面,因此有& #39; s没有要检查的page_id)。所有无关的数据字段都已删除,因为它们不会以这种形式使用。
为了简化生成响应,我将代码修剪回以下内容:
function my_user_vote() {
$result = array(
'status' => 'success',
'count' => 5
);
$result = json_encode($result);
echo $result;
die();
}
现在发生的事情是我们被重定向到一个空白页面,并在其上转储了JSON响应。尝试从上面放入.post()方法,并且出于某种原因做了同样的事情。
TL; DR:这可能需要转移到wp.se。