Преобразование сетевого запроса из синхронного в асинхронный (PHP / Javascript)

Я на самом деле использую сценарий php для рекламной сети, но код, который будет использовать издатель, является синхронным.
Теперь я хочу, чтобы скрипт загружался асинхронно.

Нужно ли менять весь код PHP / Javascript?
ИЛИ есть хитрость для использования (библиотека JavaScript …)

Спасибо за помощь !

0

Решение

Я не совсем уверен, но я думаю, что jQuery Ajax Call — это то, что вы хотите. http://api.jquery.com/jquery.ajax/

Вот пример вызова ajax:

$.ajax({
url: formURL,
type: "POST",
data: postData,
beforeSend: function() {
//this code always run Ususaly UI changes
},
success: function(data, textStatus, jqXHR) {
//var result = JSON.parse(data);
},
error: function(jqXHR, textStatus, errorThrown) {
//if ajax fails
},
complete: function(response) {
// this code always run Ususaly UI changes
}
});

Также, поскольку PHP всегда возвращает строку, для успеха вы можете просто использовать:

 "echo $string;"

Если вы хотите вернуть массив, вы должны:

"echo json_encode($array);"

Для части ошибки лучше заставить PHP возвращать ошибку, например:

header('HTTP/1.1 422 Unprocessable Entity');
header('Content-Type: application/json; charset=UTF-8');
die(json_encode($errors));
exit;
1

Другие решения

Синхронный / Асинхронный зависит от клиентской стороны. Если не очень конкретные исключения.

Так сосредоточиться на коде Javascript.: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests

РЕДАКТИРОВАТЬ
Пример: отправить файл в консольный журнал

Это простейшее использование асинхронного XMLHttpRequest.

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://bar/foo.txt", true/*ASYNCHRONOUS*/);

/* here is registered what-to-do once xhr is 'done':
it can happens anywhen, it is Asynchronous: */
xhr.onload = function (e) {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
console.log(xhr.responseText);
} else {
console.error(xhr.statusText);
}
}
};
xhr.onerror = function (e) {
console.error(xhr.statusText);
};
xhr.send(null);

Наоборот, это синхронный:

var request = new XMLHttpRequest();
request.open('GET', 'http://...', false/*ASYNCHRONOUS=false, it is SYNCHRONOUS)*/
request.send(null);
/*anything else is stopped around, one thread working only:request*/

/*once it is done, the next line is executed. This is:*/
if (request.status === 200) {
console.log(request.responseText);
}

Так что найдите, где в вашем коде JS выполняется метод JS Sync, и поменяйте один на другой.

0

По вопросам рекламы [email protected]