【问题标题】:WordPress Ajax call not working in FirefoxWordPress Ajax 调用在 Firefox 中不起作用
【发布时间】:2017-02-02 17:04:27
【问题描述】:

我在我的 WP 站点中设置了不同的 AJAX 调用,一切正常,除了一个特定的 AJAX 调用并且仅在 Firefox 中。

我在下面给出了重现问题的详细信息。它包括登录凭据,但它是一个 WP 测试站点,这些都是假凭据,所以不用担心,您可以使用它。

转到https://responsive.knowledgeplaces.com

使用凭据“aweb01”作为用户名和密码登录。

连接后,您会看到不同的按钮。这些是用于测试目的的按钮。

例如,您可以单击“无 lpId 参数”按钮,您将看到一条错误消息。

所有这些按钮都会触发服务器上的 AJAX 调用,如果服务器上的某些验证出错,则会显示一条警报消息。

所有这些按钮都可以正常工作,您将在任何浏览器(包括 Firefox)上看到警报消息。

页面右上方还有另一个按钮“deconnexion”(注销)。

当您单击此按钮时,您将退出该站点。

该按钮在 Chrome 和 IE 上可以正常工作,但在 Firefox 上则不行。

这是它的实现方式。

首先,有一个javascript文件,代码如下:

$("a[href='/kps_logout']").on('click', function() {
    // check href symbolic URL
    jQuery.post(
    WP_AJAX_URL,
            {
                'action': 'kps_logout',
                'security': $("#kpcms-ajax-nonce").val()
            }
        );
        // redirect and deactivate default navigation
        window.location.href = $kps_Host + $kps_LoginPath;
return false;
});

基本上,我使用符号 '/kps_logout' URL,并且此 JQuery 代码通过此链接在任何 href 上映射注销功能。

在服务器上,我的 WordPress 子主题的“functions.php”中有这段代码:

add_action( 'wp_ajax_kps_logout', 'kps_logout' );
add_action( 'wp_ajax_nopriv_kps_logout', 'kps_logout' );
function kps_logout() {
    // security check
    check_ajax_referer( 'kpcms-ajax-nonce', 'security' );
    // logout user and die
    wp_logout();
    die ();
}

再一次,在 Chrome 和 IE 中完美运行,而不是在 Firefox 中。

如果我激活网络开发工具,AJAX 调用听起来甚至在 Firefox 中都没有执行,而我可以在 Chrome 和 IE 中看到它。

在“无 lpId 参数”按钮上,我可以在所有浏览器中看到 AJAX 调用,并且在所有浏览器上都可以正常工作。它的实现方式完全相同。

我已经清除了 Firefox 的缓存,但没有帮助。

如果你能在这方面帮助我,那就太好了!

【问题讨论】:

  • window.location.href = $kps_Host + $kps_LoginPath; 应该放在post 回调中,以保证在页面导航发生之前执行 AJAX 调用。

标签: javascript php jquery ajax wordpress


【解决方案1】:

你的 Javascript 应该是:

$("a[href='/kps_logout']").on('click', function() {
    // check href symbolic URL
    jQuery.post(
    WP_AJAX_URL,
            {
                'action': 'kps_logout',
                'security': $("#kpcms-ajax-nonce").val()
            }, 
        function(response){
        // redirect and deactivate default navigation
        var redirectTo = response;
         window.location.href = redirectTo ;
        });

return false;
});

你的 PHP 应该类似于

<?php 

add_action( 'wp_ajax_kps_logout', 'kps_logout' );
add_action( 'wp_ajax_nopriv_kps_logout', 'kps_logout' );
function kps_logout() {
    // security check
    check_ajax_referer( 'kpcms-ajax-nonce', 'security' );
    // logout user and die
    wp_logout();

    echo  get_bloginfo("home");
    die ();
}   

?>

【讨论】:

  • 谢谢你们俩。我选择了 imtheman 答案,效果很好。是的,确实需要在 AJAX 调用之后执行重定向。
猜你喜欢
  • 2017-11-16
  • 1970-01-01
  • 2012-10-18
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多