0

ajaxリクエストを実行し、応答を受け取って値を返すまで待つ関数がありますが、返される値は未定義です。なにが問題ですか?

            function GetVMData(url_s){ 
                return $.ajax({ 
                       url: url_s, 
                       crossDomain: true,  
                       dataType: 'jsonp', 
                       error: function(xhr, status, error) {  
                           alert('failed') 
                        }  
                   }).pipe(function(data) { return data[4]; }); 
            } 

ajaxコールバック内でdata[4]の値を出力すると、正しい値が出力されるため、リクエストが実行されていることはわかりますが、これを試してみると次のようになります。

            var cord;
            cord = GetVMData(url).done(function(cpu_USG) { 
            return cpu_USG;
            }); 
            alert(cord)

コードの値が間違っています。

4

2 に答える 2

2
    var cord;
    cord = GetVMData(url).done(function(cpu_USG) { 
    return cpu_USG;
    }); 
    alert(cord)

このコードは非同期で実行されます。したがって、次のように、コールバックですべてを実行する必要があります。

    GetVMData(url).done(function(cpu_USG) { 
        alert(cpu_USG);
    }); 
于 2012-08-23T04:42:15.493 に答える
0

ここ:

var cord;

cord = GetVMData(url).done(function(cpu_USG) { 
  return cpu_USG;
});

alert(cord);

cord値ではなくオブジェクトが含まれます。ちなみに、ajaxの呼び出しがどこで終了するかわからないので、コールバックの概念に精通している必要があります。

例として:

function makeRequest(url, callback) { 
  $.ajax({
    url: url, 
    crossDomain: true,  
    dataType: 'jsonp',

    error: function(xhr, status, error) {  
      alert('failed') 
    },

    success: callback
  }); 
}

var do_something = function (data) {
  alert(data[4]);
};

cord = makeRequest(url, do_something);
于 2012-08-23T04:43:21.090 に答える