Intereting Posts
Multisite: перенаправление на соответствующий домен, если субдомен не существует Избранное изображение загружено, добавлено и установлено, но отображается только в медиа-библиотеке Что случилось с моими неактивными виджетами? Показывать категорию только определенным уровням пользователя без плагина Как войти в систему по электронной почте только без имени пользователя? WPCLI поиск и замена вариантов для всех таблиц Как добавить URL-адрес обратной связи для моих филиалов WordPress? Могу ли я имитировать пользователя, входящего в систему из WP_UnitTestCase? jQuery Подтвердить wp_editor bbPress: изменение шаблона для индекса форума Переводимые категории WP_Query posts_per_page странное кэширование Как добавить мое приложение PHP на страницу WordPress, сохраняя семантические URL? Уникальный идентификатор пользователя Transients для пользователей без регистрации шлюз оплаты woocommerce

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