При использовании XHR вместо запроса jQuery / AJAX я обнаружил, что на самом деле проще и надежнее добавить action
к ajaxurl
.
var xhr = new XMLHttpRequest();
var url = ajaxurl + '?action=csv_file';
xhr.open( 'POST', url, true );
Метод передачи данных в запрос немного отличается, но в 95% случаев я использую простой объект для запроса строковой функции:
// Convert an Object into a Query String
function objectToQueryString(obj){
return Object.keys(obj).map(key => key + '=' + obj[key]).join('&');
}
Который на практике превратит простой объект данных
var data = {
'post_id': ajax_object.post_id,
'rtype': 'enr_data',
'field': element.getAttribute('data-field'),
};
в простую строку запроса:
post_id=1234&rtype=enr_data&field=bar
Это позволяет мне передавать данные в виде строки, отправленной в целевую функцию:
var dataString = objectToQueryString( data );
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(dataString);
Для более крупных или более сложных задач вы можете фактически эффективно обернуть все это в Promise , что я сделаю, если, например, мне нужно загрузить несколько файлов и передать их вместе с одним по одному для изменения размера.