У меня есть [вероятно, глупый вопрос], но я искал и искал и до сих пор не нашел ответа.Как выполнить Javascript синхронно с httprequest
Я создал функцию, в которой хранятся мои вызовы httprequest на моем сервере, и я передаю URL-адрес webservice и параметры метода POST в функцию. Моя функция обработки событий, которая вызывает этот веб-шар, должна что-то сделать с ответом.
К сожалению, код после вызова функции веб-вызова выполняется до того, как у меня есть требуемое значение, которое вызывает огромные ошибки. Мой код выглядит следующим образом:
function process_stuff() {
do_stuff;
var d = webcall(link, params);
if (d == "OK") {
do_stuff2;
}
}
function webcall(link, params) {
//httprequest...;
return responseText;
}
Проверка на г не удается, как он выполняется, если заявление, прежде чем d заполняется, поэтому d остается неопределенным или пустой .. Пожалуйста, помогите. Как заставить код ждать, пока d не будет заполнено значением из веб-камеры?
EDIT:
Вот код в соответствии с вашими комментариями:
function checker() {
var d; // declare d here so it is global among process_logic() and give_alert()
function process_logic(callback) {
var params = "func=" + encodeURIComponent("webcalls");
params += "&text=" + encodeURIComponent("yadda");
var linker = "http://www.wigital.co.za/test/test.php";
d = webcall(params, linker, callback);
alert(d + ' on line 63');
}
function give_alert(d) {
if (d == "OK") {
alert("Success");
} else {
alert("not so sure... " + d);
}
}
//process_logic(give_alert(d));
process_logic(give_alert());
}
function webcall(a, link) {
// a = paramaters string, link is the URL of the web service
//alert(callback);
var d;
var x = new XMLHttpRequest();
/* What to do when server responds - define this before sending to server */
x.onreadystatechange = function() {
/* Error check */
if (x.readyState === 4 && x.status !== 200) {
return("PROBLEM: " + x.response);
}
/* Process response */
if (x.readyState === 4 && x.status === 200) {
//alert("I have a return value");
return x.responseText;
//alert(x.responseText);
//d = x.responseText;
}
};
/* send to server */
x.open("POST", link, true);
x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
x.send(a);
/*
if (typeof callback === 'function') {
callback(d);
}*/
}
Я хочу переменную д в функции give_alert() заселяться. В настоящее время это неопределено, поскольку функция give_alert() выполняется до того, как webcall() завершил и вернул значение ...
Возможно, вам понадобится показать нам ваш полный код, а не '// httprequest ...;', если вы хотите, чтобы мы могли найти проблему. –
Это обычная проблема с кучей шаблонов для ее решения. Без дополнительного кода будет сложно найти решение вашей конкретной проблемы, но попробуйте исследовать JavaScript 'Promises' как одно из возможных решений. – GSP
Слово процессуальное неверно в этом контексте, вы ищете синхронное выполнение. , чтобы убедиться, что вы столкнулись с ошибкой или неправильной реализацией, вам нужно будет показать код, который вы используете для выполнения HTTP-запроса. Как правило, вам придется использовать обратный вызов или оптимальное обещание. Ссылка на обещания: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise – omerkarj