2017-02-02 50 views
0

我已经在我的WP站点中设置了不同的AJAX调用,并且除了一个特定的AJAX调用并且只在Firefox中,一切正常。WordPress的Ajax调用不工作在Firefox

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

转到https://responsive.knowledgeplaces.com

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

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

例如,你可以点击按钮“no lpId parameter”,你会看到一条错误消息。

所有这些按钮都会触发服务器上的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”网址,这个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中看到它。

在“no lpId parameter”按钮上,我可以在所有浏览器中看到AJAX调用,并且它在所有浏览器上都能正常工作。它的实现方式完全一样。

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

所以,如果你能帮助我,这将是伟大的!

+0

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

回答

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(); 
} 

?> 
+0

感谢你们俩。 我与imtheman答案一起工作正常。 的确,重定向需要在AJAX调用之后执行。 –