Intereting Posts
Различная постоянная ссылка для должностей и авторов update_user_meta (): невидимое хранилище данных Включить только путь домена в многопользовательской сети Отменить расписание 1 Установка WordPress с 2 страницами: каждая страница получает отдельный домен JQuery не загружается / работает на домашней странице WordPress Связывание Serialized Setting с JS для ответа в реальном времени current_shortcode () – обнаружение используемого в настоящее время короткого кода Где пользователь WordPress хранит сообщения электронной почты при вводе комментариев? Разрешения для установки тем и файлов в целом? Неустранимая ошибка: Непринятая ошибка: вызов функции undefined do_action_ref_array () при использовании функции wp_signon Как определить собственное семейство шрифтов для блога WordPress, которое не повлияет на весь сайт Автоматически добавлять пользовательские поля (post_meta) ко всем опубликованным сообщениям, ежечасно, через wp_cron? Использование типов параметров встроенного Visual Composer в пользовательских параметрах get_post_meta не работает внутри цикла

Ajax не работает правильно, используя Firefox, но работает в Chrome

Я работаю над плагином, который, кажется, хорош в Chrome, но не запускает скрипт PHP через Ajax в Firefox. Это заставляет меня отвлекаться. Вот кодовые блоки, которые относятся к нему.

Во-первых, JavaScript enqueue:

wp_enqueue_script ( 'jquery' ); $script_url = plugins_url ( '/js/seamless-donations.js', __FILE__ ); wp_register_script ( 'seamless_javascript_code', $script_url, array( 'jquery' ), false ); wp_enqueue_script ( 'seamless_javascript_code' ); // declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php) wp_localize_script ( 'seamless_javascript_code', 'dgxDonateAjax', array( 'ajaxurl' => admin_url ( 'admin-ajax.php' ), 'nonce' => wp_create_nonce ( 'dgx-donate-nonce' ), 'postalCodeRequired' => dgx_donate_get_countries_requiring_postal_code () ) ); 

Теперь связанный JavaScript, который вызывает вызов Ajax:

 console.log("-- SeamlessDonationsCheckout: before jQuery.post"); console.log("-- SeamlessDonationsCheckout: ajaxurl=" + dgxDonateAjax.ajaxurl); jQuery.ajax({ url: dgxDonateAjax.ajaxurl, data: data, success: function() { console.log("-- SeamlessDonationsCheckout: jQuery.ajax success"); //response(data); } }); //jQuery.post(dgxDonateAjax.ajaxurl, data, SeamlessDonationsAjaxCallback); console.log("-- SeamlessDonationsCheckout: after jQuery.post"); 

Массив данных состоит из:

 var data = { action: 'dgx_donate_paypalstd_ajax_checkout', referringUrl: referringUrl, nonce: nonce, sessionID: sessionID, donationAmount: donationAmount, (and so on, it's a large array) }; 

Крючки:

 add_action ( 'wp_ajax_dgx_donate_paypalstd_ajax_checkout', 'dgx_donate_paypalstd_ajax_checkout' ); add_action ( 'wp_ajax_nopriv_dgx_donate_paypalstd_ajax_checkout', 'dgx_donate_paypalstd_ajax_checkout' ); 

И, наконец, начало функции PHP Ajax:

 function dgx_donate_paypalstd_ajax_checkout () { // Log dgx_donate_debug_log ( '----------------------------------------' ); dgx_donate_debug_log ( 'DONATION TRANSACTION STARTED' ); $php_version = phpversion (); dgx_donate_debug_log ( "PHP Version: $php_version" ); dgx_donate_debug_log ( "Seamless Donations Version: " . dgx_donate_get_version () ); 

В Chrome файл журнала четко показывает, что функция была вызвана, но ничего нет в Firefox. Кроме того, в Chrome журнал браузера показывает записи журнала до и после вызовов jQuery.ajax, а также запись «success», но Firefox этого не делает.

Я могу подтвердить, что переменная для URL Ajax передана, потому что это сообщение

 "-- SeamlessDonationsCheckout: ajaxurl=http://podtrack.com/wp-admin/admin-ajax.php" 

отображается в консоли браузера Firefox. Таким образом, это не похоже на то, что URL-адрес ajax не передается.

Я был бы признателен за любые рекомендации. У меня был очень сильный удар.

Благодаря!

–David

Solutions Collecting From Web of "Ajax не работает правильно, используя Firefox, но работает в Chrome"

Это баребоны для вызова и ответа AJAX. Посмотрите и убедитесь, что это работает на Chrome и Firefox для вас – работает для меня.

 <?php // Some function for data we'll pass function dgx_donate_get_countries_requiring_postal_code() { return "cc postal code stuff..."; } // Register everything add_action('init', function () { // Add required scripts wp_enqueue_script('jquery'); $script_url = plugins_url('/js/seamless-donations.js', __FILE__); wp_register_script('seamless_javascript_code', $script_url, array('jquery'), false); wp_enqueue_script('seamless_javascript_code'); // Localize our data wp_localize_script( 'seamless_javascript_code', 'dgxDonateAjax', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('dgx-donate-nonce'), 'postalCodeRequired' => dgx_donate_get_countries_requiring_postal_code() ) ); // Register AJAX handlers add_action('wp_ajax_dgx_donate_paypalstd_ajax_checkout', 'dgx_donate_paypalstd_ajax_checkout'); add_action('wp_ajax_nopriv_dgx_donate_paypalstd_ajax_checkout', 'dgx_donate_paypalstd_ajax_checkout'); // AJAX handler (PRIV / NO PRIV) function dgx_donate_paypalstd_ajax_checkout() { // If we fail don't be silent $fail_message = ''; if (empty($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'dgx-donate-nonce')) $fail_message = 'Bad Nonce'; if (empty ($_POST['action'])) $fail_message = 'Missing Action'; if ($_POST['action'] !== 'dgx_donate_paypalstd_ajax_checkout') $fail_message = 'Bad Action'; // We failed, let em know... if (!empty ($fail_message)) { wp_send_json_error(array( 'message' => $fail_message )); // die } // Do logic stuff // Send the Success Response wp_send_json_success(array( 'action' => $_POST['action'], 'message' => 'Checkout Complete', 'postalCodeRequired' => $_POST['postalCodeRequired'], 'ID' => 1 )); // die } }); // Shortcut to trigger AJAX call on page load add_action('wp_footer', function () { ?> <script> (function ($) { var data = { action: 'dgx_donate_paypalstd_ajax_checkout', nonce: dgxDonateAjax.nonce, postalCodeRequired: dgxDonateAjax.postalCodeRequired, }; $.ajax({ type: 'POST', url: dgxDonateAjax.ajaxurl, data: data, success: function (response) { // look at the response if (response.success) { // succcess data console.log(response.data); } else { // no good console.log(response); } } }); })(jQuery); </script> <?php }); 

Вам нужно type: 'POST' в вашем вызове jQuery.ajax. По умолчанию используется GET, и для этого требуется POST.

Потому что кто-то ниже спросил пример:

 jQuery.ajax({ url: dgxDonateAjax.ajaxurl, data: data, type: 'POST', success: function() { console.log("-- SeamlessDonationsCheckout: jQuery.ajax success"); //response(data); } });