我从JSON请求收到正确的数据,但是当我想从函数返回结果时,我得到“未定义”

时间:2014-02-15 15:40:22

标签: php jquery arrays json ajax-request

当我调用此函数时,我收到了我想要的正确数组,但是一旦我尝试返回它,控制台就会告诉我“选项”是未定义的。有什么想法吗?

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)); 

3 个答案:

答案 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  
}