0

この件に関する多くの投稿を見て、いくつかの解決策を試しましたが、うまくいかないようです。

最後の試行

function checkzip(x){  

       $.ajax({
       type:'POST',
       url:'zipcheck.php',
       data:{zip: x},
       async: false
    }).done(function(r){
        rates(r);
    });
}

function rates(r){
    alert (r);
    if (r !== 'none'){
    m = JSON.parse(r);
    return m;
    }
    else {
        return false;
    }
}

返されるjsonは{"rateA":"125","rateB":"80","rateC":"150","rateD":"130"}です

だから私はできるようにしたい:

new_rate = checkzip('77090');

alert (new_rate.rateA);

しかし、戻り値が未定義になっています

成功した関数を渡そうとしました: AND .done(), async: false を設定しているときに、別の関数にも渡すのではなく、両方から直接返そうとしました。zipcheck() 関数内の関数内で ajax 呼び出しを配置し​​、そこからも呼び出してみました。ajax からオブジェクトを作成したり、非同期関数を操作したりする際に、何かが欠けています。

4

1 に答える 1

1

あなたの問題は非同期性にあると考えるのは正しいです。基本的には、checkzip() が値を返すのではなく、rates() 関数内で応答を処理する必要があります。rate() メソッド内に alert() 呼び出しを配置すると、何らかの出力が表示されるはずです。

function checkzip(x) {  
       $.ajax({
       type:'POST',
       url:'zipcheck.php',
       data:{zip: x},
       async: false
    }).done(function (r) {
        rates(r);
    });
}

function rates(r) {
    alert(r);
    if (r !== 'none') {
        var m = JSON.parse(r);
        // Do something with m now.
        alert(m.rateA);
    }
}
于 2013-02-18T22:51:45.177 に答える