- struggled to make ajax works, but now is ok
- starting to make serverside works
This commit is contained in:
@@ -3,9 +3,12 @@
|
||||
* - PLGNTLS_data.ajax_nonce and PLGNTLS_data.ajax_url
|
||||
* are passed from the class PLGNTLS_class
|
||||
*/
|
||||
|
||||
/*
|
||||
// OLD VERSION
|
||||
console.log("PLGNTLS_data");
|
||||
console.log(PLGNTLS_data);
|
||||
function PLGNTLS_ajax(data_obj, action) {
|
||||
function PLGNTLS_ajax(action, data_obj) {
|
||||
const data = new FormData();
|
||||
data.append("action", action);
|
||||
data.append("_ajax_nonce", PLGNTLS_data.ajax_nonce);
|
||||
@@ -15,6 +18,101 @@ function PLGNTLS_ajax(data_obj, action) {
|
||||
return fetch(PLGNTLS_data.ajax_url, {
|
||||
method: "POST",
|
||||
credentials: "same-origin",
|
||||
body: data
|
||||
body: data,
|
||||
});
|
||||
}
|
||||
*/
|
||||
|
||||
// https://stackoverflow.com/q/52657814/9497573
|
||||
function is_plain_object(obj)
|
||||
{
|
||||
if (!obj)
|
||||
return false;
|
||||
if (obj.constructor !== Object)
|
||||
return false;
|
||||
if (Object.getPrototypeOf(obj) !== Object.prototype)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
function PLGNTLS_fetch(src = null, options = null)
|
||||
{
|
||||
if (src === null)
|
||||
return null;
|
||||
if (options === null)
|
||||
{
|
||||
const data = new FormData();
|
||||
data.append('action', src);
|
||||
data.append('_ajax_nonce', PLGNTLS_data.ajax_nonce);
|
||||
|
||||
options = {
|
||||
method: 'POST',
|
||||
credentials: 'same-origin',
|
||||
body: data,
|
||||
};
|
||||
}
|
||||
else if (is_plain_object(options))
|
||||
{
|
||||
// check for method, default POST
|
||||
if (!Object.hasOwn(options, 'method'))
|
||||
options.method = 'POST';
|
||||
// check for credentials, default same-origin
|
||||
if (!Object.hasOwn(options, 'credentials'))
|
||||
options.credentials = 'same-origin';
|
||||
|
||||
// check for body, default contains action and nonce
|
||||
if (!Object.hasOwn(options, 'body'))
|
||||
options.body = new FormData();
|
||||
// add action and nonce in options.body
|
||||
if (options.body instanceof FormData)
|
||||
{
|
||||
// dont check if action and nonce already exist, need new anyway
|
||||
options.body.set('action', src);
|
||||
options.body.set('_ajax_nonce', PLGNTLS_data.ajax_nonce);
|
||||
}
|
||||
else
|
||||
{
|
||||
// should think a better strategy : https://stackoverflow.com/q/20295080/9497573
|
||||
// const data = {};
|
||||
// if (is_plain_object(options.body))
|
||||
// {
|
||||
// for (const key in options.body)
|
||||
// data[key] = options.body[key];
|
||||
// }
|
||||
// else
|
||||
// data.data = options.body;
|
||||
// data.action = src;
|
||||
// data._ajax_nonce = PLGNTLS_data.ajax_nonce;
|
||||
// options.body = JSON.stringify(data);
|
||||
|
||||
// cannot work if fetch use :
|
||||
// headers: {"Content-Type": "application/json"},
|
||||
const data = new FormData( );
|
||||
data.append( 'action', src );
|
||||
data.append( '_ajax_nonce', PLGNTLS_data.ajax_nonce );
|
||||
if ( is_plain_object( options.body ) )
|
||||
{
|
||||
console.log( "1" );
|
||||
for ( const key in options.body )
|
||||
data.append( key, JSON.stringify(options.body[key]) );
|
||||
}
|
||||
// is string : https://stackoverflow.com/q/4059147/9497573
|
||||
else if ( typeof options.body === 'string' || options.body instanceof String )
|
||||
{
|
||||
console.log( "2" );
|
||||
data.append( 'data', options.body );
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log( "3" );
|
||||
data.append('data', JSON.stringify(options.body));
|
||||
}
|
||||
options.body = data;
|
||||
}
|
||||
}
|
||||
else
|
||||
throw new Error('options not plain object or formData');
|
||||
|
||||
console.log("options: ", options);
|
||||
return fetch(PLGNTLS_data.ajax_url, options);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user