我用ajax调用了一些函数。。。基本上,一切都按预期进行,但现在不是这样。我不确定是什么导致了这个问题。
我的页面上有这样一个按钮:
<p class=\'form-submit\' method=\'post\'>
<input id=\'$message_id\' name=\'message_read\' type=\'button\' onclick=hideMessage($message_id) class=\'submit button mark-as-read\' value= \'Mark as read\' />
</p>
当我单击该按钮时,以下ajax代码从
js/wp-ajax-calls.js
jQuery(document).ready(function() {
jQuery(".mark-as-read").click(function () {
console.log(\'mark as read ajax called\');
jQuery.ajax({
type: "POST",
url: "/wp-admin/admin-ajax.php",
data: {
action: \'mark_message_as_read\',
message_id: this.id
}
success: function (msg) {
console.log(\'action was successful\');
console.log(msg);
},
error: function (errormessage) {
console.log(errormessage);
}
});
});
});
当我点击按钮时,我看到了我放在那里的控制台消息。
在我的functions.php
我有以下功能:
add_action(\'wp_ajax_mark_message_as_read\', \'mark_message_as_read\');
function mark_message_as_read() {
echo "<script>console.log(\'the message function is called\');</script>";
//do stuff
}
我没有看到第二条控制台消息。
当我检查浏览器上的网络选项卡时,我可以看到ajax请求正在生成302响应。有趣的是,当我以管理员用户的身份登录到我的网站时,我得到了200条回复,网站的行为完全符合我的预期,没有任何问题。我仅在以订阅者身份登录时收到302响应。
以下是我作为订阅服务器登录时的响应标头:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://localhost
Cache-Control: no-cache, must-revalidate, max-age=0
Connection: Keep-Alive
Content-Length: 1
Content-Type: text/html; charset=UTF-8
Date: Wed, 31 Oct 2018 05:32:40 GMT
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Keep-Alive: timeout=5, max=100
Location: https://localhost/
Referrer-Policy: strict-origin-when-cross-origin
Server: Apache/2.4.18 (Ubuntu)
Strict-Transport-Security: max-age=63072000; includeSubdomains
X-Content-Type-Options: nosniff
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
X-Robots-Tag: noindex
无论我以谁的身份登录,都会从原始ajax请求调用“success”回调。
如果需要,很乐意提供更多信息。
谢谢