Ajax call not working anymore

时间:2018-10-24 作者:ellen

我用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”回调。

如果需要,很乐意提供更多信息。

谢谢

1 个回复
最合适的回答,由SO网友:ellen 整理而成

我通过之前的帖子找到了答案:

Issue with front-end ajax, getting a 302 redirect when accessing wp-admin/admin-ajax.php

基本上,我添加了一个操作来防止订阅者看到某些wordpress页面。

  function limit_subscriber_access() {
    $redirect = home_url( \'/\' );
    if ( ! ( current_user_can( \'manage_options\' ) || current_user_can( \'edit_posts\' ) ))
        exit( wp_redirect( $redirect ) );
}
这导致302重定向,并阻止执行与$wpdb相关的代码。以下是我补充的内容:

  function limit_subscriber_access() {
    $redirect = home_url( \'/\' );
    if ( ! ( current_user_can( \'manage_options\' ) || current_user_can( \'edit_posts\' ) ) && !defined(\'DOING_AJAX\'))
        exit( wp_redirect( $redirect ) );
}
我进行了测试,它似乎按照我的意愿工作。

感谢所有帮助我找到答案的人!

结束

相关推荐

WordPress多站点不工作wp-admin

我有一个多站点,在更改了重定向之后,我丢失了wp admin,我返回了configs,但如果丢失了config htaccess。我插入域。站点/wp管理并转到域。地点我有这个:Htaccess<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\\.php$ - [L] # uploaded files RewriteRule ^([_0-9a-z