У меня есть этот код:
JavaScript:
function foo(callback){
var producto = $("#inpt-producto").val();
var ajax = new XMLHttpRequest();
var url = "file_products.php"; // It will return 1 or 0
var params = "producto=" + producto;
ajax.open("POST", url, true);ajax.onreadystatechange = function()
{
if(ajax.readyState == 4 && ajax.status == 200) {
callback(ajax.responseText);
}
};
ajax.send(params);
}
PHP:
$objectProduct = new product_Model();
$option = $objectProduct->existProduct($codProduct); // return 1 or 0
echo $option
Он отлично работает для меня. Но следующий код не сработал.
var encontrado = foo(function(result){ // I need store it in "encontrado" variable.
console.log(result);//Actually return 1 or 0 value
});
console.log(encontrado); //Return Undefined :-(
Файл file_products.php
вернуть 1 или 0.
Переменная encontrado
не хранить данные. РавноНеопределенныйMsgstr «Мне нужно хранить возвращаемое значение PHP. Я усердно работал, но не нашел решения.
Что я могу сделать, чтобы это исправить? Любая идея ?
Благодарю.
В этом случае переменная encontrado
устанавливается на возвращение foo
функция, но foo
функция вообще ничего не возвращает, поэтому undefined
, Я собираюсь предположить, что вы хотите encontrado
быть установлен на результат вызова ajax, поэтому следующий код — это то, что вы будете делать.
var encontrado;
foo(function(result){
encontrado = result;
console.log(encontrado);
});
Теперь имейте в виду, что encontrado все еще будет undefined
если обратный вызов не произошел, поэтому не пытайтесь использовать его, пока обратный вызов не будет выполнен.
Кроме того, вы, вероятно, ожидали encontrado
быть результатом обратного вызова, но это не так, как работает JavaScript. Вместо этого было бы установлено возвращаемое значение функции foo. И чтобы устранить любую возможную путаницу, console.log
не возвращает никакого значения, он просто выводит его на консоль, чтобы вернуть значение на самом деле return some_variable;
,
Это частные решения, работает нормально. Но он использует «async: false».
if(producto!=""){
encontrado = foo();
}
if(nombre==""){
$("#messagesDiv").html("Field is empty");
isValid = false;
}else
if(encontrado==1){
$("#messagesDiv").html("Field is empty.");
$("#inpt-producto").focus();
isValid = false;
}
......
more validations....
......
......
if(isValid){
//Request and save data in Data base
}function foo()
{
var producto = $("#inpt-producto").val();
var parameters = "producto=" + producto ;
url = 'producto.php',
ajax = new XMLHttpRequest(),
u = null;
ajax.open('POST', url, false);
ajax.onreadystatechange = function()
{
if (ajax.readyState == 4)
{
if (ajax.status == 200){
u = ajax.responseText;
}
}
};
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax.setRequestHeader("Connection", "close");
ajax.send(parameters);
return u;
}
Пока все в порядке. Но я думаю изменить и улучшить это. Я нашел «Отложенный объект» из jQuery. Может быть Работы