2017-02-02 47 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調用之後執行。 –