当我调用此函数时,我收到了我想要的正确数组,但是一旦我尝试返回它,控制台就会告诉我“选项”是未定义的。有什么想法吗?
function getOptionsJSON(Ordernumber) {
$.getJSON(window.location.pathname+'/ajaxRequest?ordernumber='+Ordernumber+'&'+Math.round(new Date().getTime()), function(data) {
if(data['articleID']) {
options = data['values_label_array'];
console.log(options) // returns {"1":"Option 1","2":"Option 2"}
}
});
console.log(options) // returns Undefined
return options;
}
function selectOptions(){
var options = getOptionsJSON($(row).find('.ordernumber').val());
console.log(options) // returns Undefined
}
这是在AjaxREquestAction中调用的PHP函数:
$returnData["values_label_array"] = json_encode($this->getOptionsAction($ordernumber));
答案 0 :(得分:1)
您正在调用其范围之外的选项。你在一个函数中声明它,所以它的作用域是该函数。您需要在全局范围内声明它。
答案 1 :(得分:0)
问题是getJSON是异步的。
在实际完成JSON请求之前,console.log(operations)正在执行。您可以在console.log中看到这一点,其中未定义的行将出现在选项上方。
内部函数(数据)需要调用处理器而不是getOptionsJSON返回选项。
你可以简单地通过
来做到这一点$.getJSON(window.location.pathname+'/ajaxRequest?ordernumber='+Ordernumber+'&'+Math.round(new Date().getTime()), function(data) {
if(data['articleID']) {
options = data['values_label_array'];
console.log(options) // returns {"1":"Option 1","2":"Option 2"}
processJSON(options );
}
});
function selectOptions(){
getOptionsJSON($(row).find('.ordernumber').val());
}
function processJSON(data) {
//do something with the JSON;
}
答案 2 :(得分:0)
你必须在函数内声明一个变量。函数外部无法访问内部函数变量
function getOptionsJSON(Ordernumber) {
//declare variable here and then assign the values
var options;
$.getJSON(window.location.pathname+'/ajaxRequest?ordernumber='+Ordernumber+'&'+Math.round(new Date().getTime()), function(data) {
if(data['articleID']) {
options = data['values_label_array'];
console.log(options) // returns {"1":"Option 1","2":"Option 2"}
}
});
console.log(options) // returns Undefined
return options;
}
function selectOptions(){
var options = getOptionsJSON($(row).find('.ordernumber').val());
console.log(options) // returns Undefined
}