当我使用Chrome浏览器检查来自Console的日志时,我始终未定义sideType
。它不会将数据返回sideType
变量。
当我将console.log(sideType);
放入sideGroupData()
函数时 - 它可以正常工作。
代码:
function sideGroupData(GroupID) {
$.getJSON("group_data.php",{GroupID:GroupID}, function(j){
return j;
});
}
function reloadProduct(productID) {
$.post("product.php", { productID:productID }, function(data) {
var sideType = sideGroupData(123);
console.log(sideType);
});
}
reloadProduct(999);
答案 0 :(得分:1)
sidegroupdata()
函数调用将立即返回 - 它将触发ajax请求并继续执行。这意味着sideType
被赋予空值,因为sideGroupData实际上并没有在ajax调用部分之后显式返回任何内容。
你有没有理由在ajax请求中进行ajax请求?修改product.php
页面以返回包含单个响应中包含的产品ID和'sidegroupdata'的数据结构会不会更有意义吗?
答案 1 :(得分:1)
这是因为你在关闭中运行你的呼叫。 ajax调用是异步进行的,这意味着即使你正在进行ajax调用,你的代码也会继续移动:
function setVar () {
var retVal = 1;
$.ajax(..., function(data){
retVal = data; //retVal does NOT equal data yet, it's still waiting
});
return retVal; //will return 1 every time because code doesn't wait for ajax
}
var someVar = setVar(); // will be 1
如果要返回该值,请包含一个在返回数据时运行的回调函数,并使用提供的数据运行它,如下所示:
function sideGroupData(GroupID, callback){
$.getJSON('group_data.php', {GroupID: GroupID}, callback);
}
function reloadProduct(productID) {
$.post("product.php", { productID:productID }, function(data) {
sideGroupData(123, function(sideType){
console.log(sideType);
});
});
}
或者,只需在函数内部进行调用:
function reloadProduct(productID, groupId) {
var prod, sideType;
$.post("product.php", { productID:productID }, function(data) {
prod = data;
$.getJSON('group_data.php', {GroupID: groupId}, function(json){
sideType = json;
// you now have access to both 'prod' and 'sideType', do work here
});
});
}