Replace $.ajax() calls with browser-native window.fetch() calls. (#36275)
This commit is contained in:
parent
9be843422d
commit
6c053d3eec
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: minor
|
||||||
|
Type: update
|
||||||
|
|
||||||
|
Replace $.ajax() calls with browser-native window.fetch() calls.
|
|
@ -167,16 +167,16 @@
|
||||||
|
|
||||||
if ( attributes.count && attributes.count === attributes.chosenCount ) {
|
if ( attributes.count && attributes.count === attributes.chosenCount ) {
|
||||||
if ( form.useAjax ) {
|
if ( form.useAjax ) {
|
||||||
if ( form.xhr ) {
|
if ( form.controller ) {
|
||||||
form.xhr.abort();
|
form.controller.abort();
|
||||||
}
|
}
|
||||||
form.$form.block( { message: null, overlayCSS: { background: '#fff', opacity: 0.6 } } );
|
form.$form.block( { message: null, overlayCSS: { background: '#fff', opacity: 0.6 } } );
|
||||||
currentAttributes.product_id = parseInt( form.$form.data( 'product_id' ), 10 );
|
currentAttributes.product_id = parseInt( form.$form.data( 'product_id' ), 10 );
|
||||||
currentAttributes.custom_data = form.$form.data( 'custom_data' );
|
currentAttributes.custom_data = form.$form.data( 'custom_data' );
|
||||||
form.xhr = $.ajax( {
|
const options = {
|
||||||
url: wc_add_to_cart_variation_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'get_variation' ),
|
url: wc_add_to_cart_variation_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'get_variation' ),
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: currentAttributes,
|
data: $.param( currentAttributes ),
|
||||||
success: function( variation ) {
|
success: function( variation ) {
|
||||||
if ( variation ) {
|
if ( variation ) {
|
||||||
form.$form.trigger( 'found_variation', [ variation ] );
|
form.$form.trigger( 'found_variation', [ variation ] );
|
||||||
|
@ -199,7 +199,25 @@
|
||||||
complete: function() {
|
complete: function() {
|
||||||
form.$form.unblock();
|
form.$form.unblock();
|
||||||
}
|
}
|
||||||
} );
|
};
|
||||||
|
|
||||||
|
const controller = new AbortController();
|
||||||
|
form.controller = controller;
|
||||||
|
|
||||||
|
window.fetch( options.url, {
|
||||||
|
method: options.type,
|
||||||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
|
||||||
|
body: options.data,
|
||||||
|
signal: controller.signal
|
||||||
|
} )
|
||||||
|
.then( response => {
|
||||||
|
if ( !response.ok ) {
|
||||||
|
throw new Error( response.statusText );
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then( options.success )
|
||||||
|
.finally( () => options.complete() );
|
||||||
} else {
|
} else {
|
||||||
form.$form.trigger( 'update_variation_values' );
|
form.$form.trigger( 'update_variation_values' );
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,21 @@ jQuery( function( $ ) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$.ajax( this.requests[0] );
|
const options = this.requests[0];
|
||||||
|
window.fetch( options.url, {
|
||||||
|
method: options.type,
|
||||||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
|
||||||
|
body: options.data
|
||||||
|
} )
|
||||||
|
.then( response => {
|
||||||
|
if ( !response.ok ) {
|
||||||
|
throw new Error( response.statusText );
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
} )
|
||||||
|
.then( options.success )
|
||||||
|
.catch( error => options.error && options.error() )
|
||||||
|
.finally( () => options.complete && options.complete() );
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -95,7 +109,7 @@ jQuery( function( $ ) {
|
||||||
e.data.addToCartHandler.addRequest({
|
e.data.addToCartHandler.addRequest({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: wc_add_to_cart_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'add_to_cart' ),
|
url: wc_add_to_cart_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'add_to_cart' ),
|
||||||
data: data,
|
data: $.param( data ),
|
||||||
success: function( response ) {
|
success: function( response ) {
|
||||||
if ( ! response ) {
|
if ( ! response ) {
|
||||||
return;
|
return;
|
||||||
|
@ -139,9 +153,9 @@ jQuery( function( $ ) {
|
||||||
e.data.addToCartHandler.addRequest({
|
e.data.addToCartHandler.addRequest({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: wc_add_to_cart_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'remove_from_cart' ),
|
url: wc_add_to_cart_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'remove_from_cart' ),
|
||||||
data: {
|
data: new URLSearchParams( {
|
||||||
cart_item_key : $thisbutton.data( 'cart_item_key' )
|
cart_item_key : $thisbutton.data( 'cart_item_key' )
|
||||||
},
|
} ).toString(),
|
||||||
success: function( response ) {
|
success: function( response ) {
|
||||||
if ( ! response || ! response.fragments ) {
|
if ( ! response || ! response.fragments ) {
|
||||||
window.location = $thisbutton.attr( 'href' );
|
window.location = $thisbutton.attr( 'href' );
|
||||||
|
|
|
@ -38,9 +38,9 @@ jQuery( function( $ ) {
|
||||||
var $fragment_refresh = {
|
var $fragment_refresh = {
|
||||||
url: wc_cart_fragments_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'get_refreshed_fragments' ),
|
url: wc_cart_fragments_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'get_refreshed_fragments' ),
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: {
|
data: new URLSearchParams( {
|
||||||
time: new Date().getTime()
|
time: new Date().getTime()
|
||||||
},
|
} ).toString(),
|
||||||
timeout: wc_cart_fragments_params.request_timeout,
|
timeout: wc_cart_fragments_params.request_timeout,
|
||||||
success: function( data ) {
|
success: function( data ) {
|
||||||
if ( data && data.fragments ) {
|
if ( data && data.fragments ) {
|
||||||
|
@ -68,7 +68,25 @@ jQuery( function( $ ) {
|
||||||
|
|
||||||
/* Named callback for refreshing cart fragment */
|
/* Named callback for refreshing cart fragment */
|
||||||
function refresh_cart_fragment() {
|
function refresh_cart_fragment() {
|
||||||
$.ajax( $fragment_refresh );
|
const controller = new AbortController();
|
||||||
|
const timeoutId = setTimeout( () => controller.abort(), $fragment_refresh.timeout );
|
||||||
|
|
||||||
|
window.fetch( $fragment_refresh.url, {
|
||||||
|
method: $fragment_refresh.type,
|
||||||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
|
||||||
|
body: $fragment_refresh.data,
|
||||||
|
signal: controller.signal
|
||||||
|
} )
|
||||||
|
.then( response => {
|
||||||
|
clearTimeout( timeoutId );
|
||||||
|
|
||||||
|
if ( !response.ok ) {
|
||||||
|
throw new Error( response.statusText );
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
} )
|
||||||
|
.then( $fragment_refresh.success )
|
||||||
|
.catch( error => $fragment_refresh.error() );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cart Handling */
|
/* Cart Handling */
|
||||||
|
|
|
@ -8,6 +8,27 @@ jQuery( function( $ ) {
|
||||||
|
|
||||||
// Utility functions for the file.
|
// Utility functions for the file.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform an AJAX request that expects an HTML response.
|
||||||
|
*
|
||||||
|
* @param {Object} options
|
||||||
|
*/
|
||||||
|
const ajax = options => {
|
||||||
|
window.fetch( options.url, {
|
||||||
|
method: options.type || 'GET',
|
||||||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
|
||||||
|
body: options.data
|
||||||
|
} )
|
||||||
|
.then( response => {
|
||||||
|
if ( !response.ok ) {
|
||||||
|
throw new Error( response.statusText );
|
||||||
|
}
|
||||||
|
return response.text();
|
||||||
|
} )
|
||||||
|
.then( options.success )
|
||||||
|
.finally( () => options.complete() );
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a url for a given AJAX endpoint.
|
* Gets a url for a given AJAX endpoint.
|
||||||
*
|
*
|
||||||
|
@ -222,13 +243,17 @@ jQuery( function( $ ) {
|
||||||
|
|
||||||
var data = {
|
var data = {
|
||||||
security: wc_cart_params.update_shipping_method_nonce,
|
security: wc_cart_params.update_shipping_method_nonce,
|
||||||
shipping_method: shipping_methods
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$.ajax( {
|
// Flatten shipping_methods for use in URLSearchParams()
|
||||||
|
for ( var k in shipping_methods ) {
|
||||||
|
data[ 'shipping_method[' + k + ']' ] = shipping_methods[ k ];
|
||||||
|
}
|
||||||
|
|
||||||
|
ajax( {
|
||||||
type: 'post',
|
type: 'post',
|
||||||
url: get_url( 'update_shipping_method' ),
|
url: get_url( 'update_shipping_method' ),
|
||||||
data: data,
|
data: new URLSearchParams( data ).toString(),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function( response ) {
|
||||||
update_cart_totals_div( response );
|
update_cart_totals_div( response );
|
||||||
|
@ -260,10 +285,10 @@ jQuery( function( $ ) {
|
||||||
.appendTo( $form );
|
.appendTo( $form );
|
||||||
|
|
||||||
// Make call to actual form post URL.
|
// Make call to actual form post URL.
|
||||||
$.ajax( {
|
ajax( {
|
||||||
type: $form.attr( 'method' ),
|
type: $form.attr( 'method' ),
|
||||||
url: $form.attr( 'action' ),
|
url: $form.attr( 'action' ),
|
||||||
data: $form.serialize(),
|
data: new URLSearchParams( new FormData( $form[0] ) ).toString(),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function( response ) {
|
||||||
update_wc_div( response );
|
update_wc_div( response );
|
||||||
|
@ -347,10 +372,10 @@ jQuery( function( $ ) {
|
||||||
block( $( 'div.cart_totals' ) );
|
block( $( 'div.cart_totals' ) );
|
||||||
|
|
||||||
// Make call to actual form post URL.
|
// Make call to actual form post URL.
|
||||||
$.ajax( {
|
ajax( {
|
||||||
type: $form.attr( 'method' ),
|
type: $form.attr( 'method' ),
|
||||||
url: $form.attr( 'action' ),
|
url: $form.attr( 'action' ),
|
||||||
data: $form.serialize(),
|
data: new URLSearchParams( new FormData( $form[0] ) ).toString(),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function( response ) {
|
||||||
update_wc_div( response, preserve_notices );
|
update_wc_div( response, preserve_notices );
|
||||||
|
@ -369,7 +394,7 @@ jQuery( function( $ ) {
|
||||||
update_cart_totals: function() {
|
update_cart_totals: function() {
|
||||||
block( $( 'div.cart_totals' ) );
|
block( $( 'div.cart_totals' ) );
|
||||||
|
|
||||||
$.ajax( {
|
ajax( {
|
||||||
url: get_url( 'get_cart_totals' ),
|
url: get_url( 'get_cart_totals' ),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function( response ) {
|
||||||
|
@ -471,10 +496,10 @@ jQuery( function( $ ) {
|
||||||
coupon_code: coupon_code
|
coupon_code: coupon_code
|
||||||
};
|
};
|
||||||
|
|
||||||
$.ajax( {
|
ajax( {
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: get_url( 'apply_coupon' ),
|
url: get_url( 'apply_coupon' ),
|
||||||
data: data,
|
data: new URLSearchParams( data ).toString(),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function( response ) {
|
||||||
$( '.woocommerce-error, .woocommerce-message, .woocommerce-info' ).remove();
|
$( '.woocommerce-error, .woocommerce-message, .woocommerce-info' ).remove();
|
||||||
|
@ -508,10 +533,10 @@ jQuery( function( $ ) {
|
||||||
coupon: coupon
|
coupon: coupon
|
||||||
};
|
};
|
||||||
|
|
||||||
$.ajax( {
|
ajax( {
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: get_url( 'remove_coupon' ),
|
url: get_url( 'remove_coupon' ),
|
||||||
data: data,
|
data: new URLSearchParams( data ).toString(),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function( response ) {
|
||||||
$( '.woocommerce-error, .woocommerce-message, .woocommerce-info' ).remove();
|
$( '.woocommerce-error, .woocommerce-message, .woocommerce-info' ).remove();
|
||||||
|
@ -541,10 +566,10 @@ jQuery( function( $ ) {
|
||||||
.appendTo( $form );
|
.appendTo( $form );
|
||||||
|
|
||||||
// Make call to actual form post URL.
|
// Make call to actual form post URL.
|
||||||
$.ajax( {
|
ajax( {
|
||||||
type: $form.attr( 'method' ),
|
type: $form.attr( 'method' ),
|
||||||
url: $form.attr( 'action' ),
|
url: $form.attr( 'action' ),
|
||||||
data: $form.serialize(),
|
data: new URLSearchParams( new FormData( $form[0] ) ).toString(),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
success: function( response ) {
|
success: function( response ) {
|
||||||
update_wc_div( response );
|
update_wc_div( response );
|
||||||
|
@ -571,7 +596,7 @@ jQuery( function( $ ) {
|
||||||
block( $form );
|
block( $form );
|
||||||
block( $( 'div.cart_totals' ) );
|
block( $( 'div.cart_totals' ) );
|
||||||
|
|
||||||
$.ajax( {
|
ajax( {
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
url: $a.attr( 'href' ),
|
url: $a.attr( 'href' ),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
|
@ -600,7 +625,7 @@ jQuery( function( $ ) {
|
||||||
block( $form );
|
block( $form );
|
||||||
block( $( 'div.cart_totals' ) );
|
block( $( 'div.cart_totals' ) );
|
||||||
|
|
||||||
$.ajax( {
|
ajax( {
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
url: $a.attr( 'href' ),
|
url: $a.attr( 'href' ),
|
||||||
dataType: 'html',
|
dataType: 'html',
|
||||||
|
|
|
@ -8,6 +8,38 @@ jQuery( function( $ ) {
|
||||||
|
|
||||||
$.blockUI.defaults.overlayCSS.cursor = 'default';
|
$.blockUI.defaults.overlayCSS.cursor = 'default';
|
||||||
|
|
||||||
|
const ajax = options => {
|
||||||
|
const controller = new AbortController();
|
||||||
|
|
||||||
|
window.fetch( options.url, {
|
||||||
|
method: options.type,
|
||||||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
|
||||||
|
body: options.data,
|
||||||
|
signal: controller.signal
|
||||||
|
} )
|
||||||
|
.then( response => {
|
||||||
|
response.text().then( text => {
|
||||||
|
if ( !response.ok ) {
|
||||||
|
const error = new Error( response.statusText );
|
||||||
|
error.responseText = text; // Needed for when wc_checkout_params.debug_mode is enabled
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( options.dataType === 'html' ) {
|
||||||
|
options.success( text );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const json = JSON.parse( ajax.dataFilter( text, 'json' ) );
|
||||||
|
options.success( json );
|
||||||
|
} );
|
||||||
|
} )
|
||||||
|
.catch( error => options.error && options.error( error.responseText, 'error', error.message ) );
|
||||||
|
|
||||||
|
return controller;
|
||||||
|
};
|
||||||
|
ajax.dataFilter = ( raw_response, dataType ) => raw_response;
|
||||||
|
|
||||||
var wc_checkout_form = {
|
var wc_checkout_form = {
|
||||||
updateTimer: false,
|
updateTimer: false,
|
||||||
dirtyInput: false,
|
dirtyInput: false,
|
||||||
|
@ -256,11 +288,12 @@ jQuery( function( $ ) {
|
||||||
wc_checkout_form.updateTimer = setTimeout( wc_checkout_form.update_checkout_action, '5', args );
|
wc_checkout_form.updateTimer = setTimeout( wc_checkout_form.update_checkout_action, '5', args );
|
||||||
},
|
},
|
||||||
update_checkout_action: function( args ) {
|
update_checkout_action: function( args ) {
|
||||||
if ( wc_checkout_form.xhr ) {
|
if ( wc_checkout_form.controller ) {
|
||||||
wc_checkout_form.xhr.abort();
|
wc_checkout_form.controller.abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $( 'form.checkout' ).length === 0 ) {
|
var $form = $( 'form.checkout' );
|
||||||
|
if ( $form.length === 0 ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,7 +349,7 @@ jQuery( function( $ ) {
|
||||||
s_address : s_address,
|
s_address : s_address,
|
||||||
s_address_2 : s_address_2,
|
s_address_2 : s_address_2,
|
||||||
has_full_address: has_full_address,
|
has_full_address: has_full_address,
|
||||||
post_data : $( 'form.checkout' ).serialize()
|
post_data : new URLSearchParams( new FormData( $form[0] ) ).toString()
|
||||||
};
|
};
|
||||||
|
|
||||||
if ( false !== args.update_shipping_method ) {
|
if ( false !== args.update_shipping_method ) {
|
||||||
|
@ -327,7 +360,10 @@ jQuery( function( $ ) {
|
||||||
shipping_methods[ $( this ).data( 'index' ) ] = $( this ).val();
|
shipping_methods[ $( this ).data( 'index' ) ] = $( this ).val();
|
||||||
} );
|
} );
|
||||||
|
|
||||||
data.shipping_method = shipping_methods;
|
// Flatten shipping_methods for use in URLSearchParams()
|
||||||
|
for ( var k in shipping_methods ) {
|
||||||
|
data[ 'shipping_method[' + k + ']' ] = shipping_methods[ k ];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$( '.woocommerce-checkout-payment, .woocommerce-checkout-review-order-table' ).block({
|
$( '.woocommerce-checkout-payment, .woocommerce-checkout-review-order-table' ).block({
|
||||||
|
@ -338,10 +374,10 @@ jQuery( function( $ ) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
wc_checkout_form.xhr = $.ajax({
|
wc_checkout_form.controller = ajax({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: wc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'update_order_review' ),
|
url: wc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'update_order_review' ),
|
||||||
data: data,
|
data: new URLSearchParams( data ).toString(),
|
||||||
success: function( data ) {
|
success: function( data ) {
|
||||||
|
|
||||||
// Reload the page if requested
|
// Reload the page if requested
|
||||||
|
@ -404,8 +440,6 @@ jQuery( function( $ ) {
|
||||||
// Check for error
|
// Check for error
|
||||||
if ( data && 'failure' === data.result ) {
|
if ( data && 'failure' === data.result ) {
|
||||||
|
|
||||||
var $form = $( 'form.checkout' );
|
|
||||||
|
|
||||||
// Remove notices from all sources
|
// Remove notices from all sources
|
||||||
$( '.woocommerce-error, .woocommerce-message' ).remove();
|
$( '.woocommerce-error, .woocommerce-message' ).remove();
|
||||||
|
|
||||||
|
@ -486,39 +520,37 @@ jQuery( function( $ ) {
|
||||||
// Attach event to block reloading the page when the form has been submitted
|
// Attach event to block reloading the page when the form has been submitted
|
||||||
wc_checkout_form.attachUnloadEventsOnSubmit();
|
wc_checkout_form.attachUnloadEventsOnSubmit();
|
||||||
|
|
||||||
// ajaxSetup is global, but we use it to ensure JSON is valid once returned.
|
// ajax.dataFilter affects all ajax() calls, but we use it to ensure JSON is valid once returned.
|
||||||
$.ajaxSetup( {
|
ajax.dataFilter = function( raw_response, dataType ) {
|
||||||
dataFilter: function( raw_response, dataType ) {
|
// We only want to work with JSON
|
||||||
// We only want to work with JSON
|
if ( 'json' !== dataType ) {
|
||||||
if ( 'json' !== dataType ) {
|
|
||||||
return raw_response;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( wc_checkout_form.is_valid_json( raw_response ) ) {
|
|
||||||
return raw_response;
|
|
||||||
} else {
|
|
||||||
// Attempt to fix the malformed JSON
|
|
||||||
var maybe_valid_json = raw_response.match( /{"result.*}/ );
|
|
||||||
|
|
||||||
if ( null === maybe_valid_json ) {
|
|
||||||
console.log( 'Unable to fix malformed JSON' );
|
|
||||||
} else if ( wc_checkout_form.is_valid_json( maybe_valid_json[0] ) ) {
|
|
||||||
console.log( 'Fixed malformed JSON. Original:' );
|
|
||||||
console.log( raw_response );
|
|
||||||
raw_response = maybe_valid_json[0];
|
|
||||||
} else {
|
|
||||||
console.log( 'Unable to fix malformed JSON' );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return raw_response;
|
return raw_response;
|
||||||
}
|
}
|
||||||
} );
|
|
||||||
|
|
||||||
$.ajax({
|
if ( wc_checkout_form.is_valid_json( raw_response ) ) {
|
||||||
|
return raw_response;
|
||||||
|
} else {
|
||||||
|
// Attempt to fix the malformed JSON
|
||||||
|
var maybe_valid_json = raw_response.match( /{"result.*}/ );
|
||||||
|
|
||||||
|
if ( null === maybe_valid_json ) {
|
||||||
|
console.log( 'Unable to fix malformed JSON' );
|
||||||
|
} else if ( wc_checkout_form.is_valid_json( maybe_valid_json[0] ) ) {
|
||||||
|
console.log( 'Fixed malformed JSON. Original:' );
|
||||||
|
console.log( raw_response );
|
||||||
|
raw_response = maybe_valid_json[0];
|
||||||
|
} else {
|
||||||
|
console.log( 'Unable to fix malformed JSON' );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return raw_response;
|
||||||
|
};
|
||||||
|
|
||||||
|
ajax({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: wc_checkout_params.checkout_url,
|
url: wc_checkout_params.checkout_url,
|
||||||
data: $form.serialize(),
|
data: new URLSearchParams( new FormData( $form[0] ) ).toString(),
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
success: function( result ) {
|
success: function( result ) {
|
||||||
// Detach the unload handler that prevents a reload / redirect
|
// Detach the unload handler that prevents a reload / redirect
|
||||||
|
@ -556,7 +588,7 @@ jQuery( function( $ ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
error: function( jqXHR, textStatus, errorThrown ) {
|
error: function( responseText, textStatus, errorThrown ) {
|
||||||
// Detach the unload handler that prevents a reload / redirect
|
// Detach the unload handler that prevents a reload / redirect
|
||||||
wc_checkout_form.detachUnloadEventsOnSubmit();
|
wc_checkout_form.detachUnloadEventsOnSubmit();
|
||||||
|
|
||||||
|
@ -621,10 +653,10 @@ jQuery( function( $ ) {
|
||||||
coupon_code: $form.find( 'input[name="coupon_code"]' ).val()
|
coupon_code: $form.find( 'input[name="coupon_code"]' ).val()
|
||||||
};
|
};
|
||||||
|
|
||||||
$.ajax({
|
ajax({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: wc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'apply_coupon' ),
|
url: wc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'apply_coupon' ),
|
||||||
data: data,
|
data: new URLSearchParams( data ).toString(),
|
||||||
success: function( code ) {
|
success: function( code ) {
|
||||||
$( '.woocommerce-error, .woocommerce-message' ).remove();
|
$( '.woocommerce-error, .woocommerce-message' ).remove();
|
||||||
$form.removeClass( 'processing' ).unblock();
|
$form.removeClass( 'processing' ).unblock();
|
||||||
|
@ -661,10 +693,10 @@ jQuery( function( $ ) {
|
||||||
coupon: coupon
|
coupon: coupon
|
||||||
};
|
};
|
||||||
|
|
||||||
$.ajax({
|
ajax({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: wc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'remove_coupon' ),
|
url: wc_checkout_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'remove_coupon' ),
|
||||||
data: data,
|
data: new URLSearchParams( data ).toString(),
|
||||||
success: function( code ) {
|
success: function( code ) {
|
||||||
$( '.woocommerce-error, .woocommerce-message' ).remove();
|
$( '.woocommerce-error, .woocommerce-message' ).remove();
|
||||||
container.removeClass( 'processing' ).unblock();
|
container.removeClass( 'processing' ).unblock();
|
||||||
|
@ -679,10 +711,10 @@ jQuery( function( $ ) {
|
||||||
$( 'form.checkout_coupon' ).find( 'input[name="coupon_code"]' ).val( '' );
|
$( 'form.checkout_coupon' ).find( 'input[name="coupon_code"]' ).val( '' );
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
error: function ( jqXHR ) {
|
error: function ( responseText ) {
|
||||||
if ( wc_checkout_params.debug_mode ) {
|
if ( wc_checkout_params.debug_mode ) {
|
||||||
/* jshint devel: true */
|
/* jshint devel: true */
|
||||||
console.log( jqXHR.responseText );
|
console.log( responseText );
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
dataType: 'html'
|
dataType: 'html'
|
||||||
|
|
|
@ -127,7 +127,17 @@ jQuery( function( $ ) {
|
||||||
// Get the current geo hash. If it doesn't exist, or if it doesn't match the current
|
// Get the current geo hash. If it doesn't exist, or if it doesn't match the current
|
||||||
// page URL, perform a geolocation request.
|
// page URL, perform a geolocation request.
|
||||||
if ( ! get_geo_hash() || needs_refresh() ) {
|
if ( ! get_geo_hash() || needs_refresh() ) {
|
||||||
$.ajax( $geolocate_customer );
|
window.fetch( $geolocate_customer.url, {
|
||||||
|
method: $geolocate_customer.type,
|
||||||
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }
|
||||||
|
} )
|
||||||
|
.then( response => {
|
||||||
|
if ( !response.ok ) {
|
||||||
|
throw new Error( response.statusText );
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
} )
|
||||||
|
.then( $geolocate_customer.success );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Page updates.
|
// Page updates.
|
||||||
|
|
Loading…
Reference in New Issue