我有这段代码:
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
没有存储数据。它等于" 未定义"。我需要存储PHP值返回。我一直在努力,但没有找到解决方案。
我该怎么做才能修复它?有什么想法吗?
感谢。
答案 0 :(得分:0)
在这种情况下,变量encontrado
被设置为foo
函数的返回,但foo
函数根本不返回任何内容,因此它是{{1 }}。我假设您希望将undefined
设置为ajax调用的结果,因此以下代码就是您要做的。
encontrado
现在,请记住encontrado仍然是var encontrado;
foo(function(result){
encontrado = result;
console.log(encontrado);
});
,除非回调已经发生,所以在回调执行之前不要尝试使用它。
此外,您可能希望undefined
成为回调的结果,但这不是javascript的工作原理。它将被设置为foo函数的返回值。为了消除任何可能的混淆,encontrado
不会返回任何值,只是将其输出到控制台,以返回实际值为console.log
的值。
答案 1 :(得分:0)
这是一个特殊的解决方案,工作正常。但它使用“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的“Deferred Object”。可能是作品