在Javascritpt函数中从PHP查询返回对象时出现问题
Problems returning object from PHP query in Javascritpt function
我有以下javascript代码:
function requestUserList(){
//El primer paso es obtener de PHP toda la información de los usuarios
var ret;
jQuery.ajax({
type: "POST",
url: 'userfunctions.php',
dataType: 'json',
data: {functionname: 'all_user_data'},
success: function (obj) {
// if (obj.error == ""){
// for (i = 0; i < obj.users.length; i++){
// addAUser(obj.users[i],i);
// }
// }
// else{
// postErrorMessage(obj.error);
// }
console.log("Number is " + obj.users.length);
ret = obj;
}
});
console.log("Going back. N is " + ret.users.length);
return ret;
}
问题是控制台中以正确的值打印了消息"Number is"。然而,在第二个控制台打印("Going back.N is")中,我得到了一个错误,即用户不是未定义的属性。不知怎么的,我给返回值赋值不正确,但我不知道为什么。有人能帮我吗?我希望obj是函数的返回。
你的函数是异步的,所以你不能以这种方式返回你想要的值,你可以使用callback或promise,一个针对你的情况的回调示例:
function requestUserList(callback){
jQuery.ajax({
type: "POST",
url: 'userfunctions.php',
dataType: 'json',
data: {functionname: 'all_user_data'},
success: function (obj) {
callback(obj);
}
});
}
requestUserList(function (obj) {
console.log(obj);
});
您有一个变量范围错误。var ret;
仅为函数范围定义ret。然后在中声明一个新函数,该函数具有第二次隐式声明ret的新作用域。
这样,第一个ret与第二个ret完全无关。您需要在success函数中调用任何需要ret的函数。现在返回的不是函数的值,而是jQuery.ajax调用,而这个调用在调用后就死了。
此外,AJAX是异步的。这意味着你不知道它什么时候会结束——因此,你不能从那里返回值。至少以一种合理的方式。
getSomething = function () {
$.ajax({
url: url,
data: "",
type: 'GET',
success: doSuccessStuff,
error: doErrorStuff,
});
};
doSuccessStuff = function (data) {
// Have your stuff in data like data.myVariable
};
您可以将AJAX切换为同步,然后从成功函数中获取值,如下所示:
getSomething = function () {
$.ajax({
url: url,
data: "",
type: 'GET',
success: doSuccessStuff,
error: doErrorStuff,
async: false
});
};
doSuccessStuff = function (data) {
// Have your stuff in data like data.myVariable
};
然而,这是一种糟糕的做法,因为它会停止程序流,直到它超时或得到回复。在成功调用中,最好坚持向前执行链接函数。
相关文章:
- node.js for循环在函数调用返回之前进行迭代,从而产生对象问题
- Safari 和 IE 中的 JavaScript 日期对象问题
- Knockoutjs 绑定对象问题
- Angular2 奇怪的硬编码对象与 http.get 对象问题
- Javascript 循环 + 对象问题:如何使用循环获取对象中的必需项
- 全局对象问题
- 量角器页面对象问题
- JavaScript对象问题
- 嵌套循环未形成完整对象 - 问题
- ExpressJS PUT方法未定义的对象问题
- 显示对象的对象问题
- React-Router的历史对象问题
- javascript的对象问题
- javascript中的对象问题
- Javascript对象问题
- JavaScript:对象问题
- 谷歌图书API JSON对象问题
- WebMethod返回JSON对象问题
- 对象问题中的 Jquery 对象
- Javascript 对象问题