str.slice(1).split('&').reduce((acc, n) => (n = n.split('='), acc[n[0]] = n[1], acc), {})
// или
[...str.matchAll(/(\w+)=([^&]*)/g)].reduce((acc, [ , k, v ]) => ({ ...acc, [k]: v }), {})
// или
Object.fromEntries(new URLSearchParams(str))
let a = Date.now()
//браузер полностью загрузил HTML, было построено DOM-дерево, но внешние ресурсы, такие как картинки <img> и стили, могут быть ещё не загружены.
document.addEventListener('DOMContentLoaded', () => {
let s = Date.now() - a
//send 's' to server
})
//браузер загрузил HTML и внешние ресурсы (картинки, стили и т.д.).
document.addEventListener('load', () => {
let s = Date.now() - a
//send 's' to server
})
function myFetch(params){
return new Promise(function(resolve, reject){
const xhr = new XMLHttpRequest();
xhr.open(params.method, params.url, true);
xhr.send();
xhr.addEventListener('readystatechange', function(e){
if( xhr.readyState != 4 ) return;
if( xhr.status == 200 ){
resolve( xhr.responseText );
} else{ reject( xhr.statusText ); }
});
}
myFetch(//parameters...).then(//...... код который у Вас в then).
$order = new Order();
$order
->setComment($comment)
->setClient($client)
->setDeliveryAddress($address)
;
$item = new OrderItem();
$item
->setArticle($article)
->setName($name)
->setBrand($brand)
->setPrice($price)
->setAmount($amount);
$order->addOrderItem($item);
try{
$order->save();
}
catch(Exception $ex){
}