0

この関数を呼び出すと、必要な正しい配列を受け取りますが、それを返そうとすると、コンソールは「オプション」が未定義であると通知します。何か案は?

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

3 に答える 3

1

スコープ外のオプションを呼び出しています。関数内で宣言したため、その関数にスコープされます。グローバルスコープで宣言する必要があります。

于 2014-02-15T15:43:10.117 に答える
0

問題は、getJSON が非同期であることです。

console.log(operations) は、JSON リクエストが実際に完了する前に実行されています。これは、オプションの上に未定義の行が表示される 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;
}
于 2014-02-15T15:46:06.360 に答える
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  
}
于 2014-02-15T15:53:11.630 に答える