3

$ .ajax()を使用してXMLファイルから値を取得する関数があります。情報が読み込まれ、成功イベントが発生したときに、$(xml).find('')。each(function(){})を使用します。 ; いくつかの変数を設定するには...

function getData()
{
    $.ajax({
        type: 'GET',
        url : 'info.xml',
        dataType: 'xml',
        success: function(xml)
        {
            $(xml).find('DATAS').each(function()
            {
                date = new Date($(this).attr('DATE'));
                alert(date);
            })
                    //Here I have a bigger find/each that should take more time 
        },
            error: function()
            {
                    return false;
            }

    }); 
}

この場合、ドキュメントレディ関数から関数をトリガーすると、アラートに正しいデータが表示されますが、関数からアラートを削除して代わりにこれを試してみると、日付はまだ定義されていません。

$(document).ready(function()
{
if(getData() != false)
{
    alert(date);

    }
});

この場合、データはまだ準備ができていないと思いますか?each()トラバース全体が終了して準備ができたときに制御を維持する方法はありますか?

4

2 に答える 2

5

.ajax()非同期リクエストを起動します。これは、getData()すぐに返されることを意味します。サクセスハンドラー内で返されたデータに対してあらゆる種類のアクションを実行するか、.ajax追加してリクエストを同期に設定する必要があります

$.ajax({
   async: false   
});
于 2010-06-06T11:00:19.783 に答える
3

これは、AJAXが非同期であるために発生します。つまり、$.ajax()呼び出しは完了するまで終了しませんif()...alert()途中で完了する時間が与えられます。コールバック内からデータを使用する必要がある操作を開始する必要がsuccessあります。実行すると、データが使用可能になります。このようなもの:

$(function() {
  getDataAndDoSomething();
  //other ready stuff...
});
function getDataAndDoSomething() {
  $.ajax({
    type: 'GET',
    url : 'info.xml',
    dataType: 'xml',
    success: function(xml) {
        $(xml).find('DATAS').each(function() {
            date = new Date($(this).attr('DATE'));
            alert(date);
        })
        //Do the other stuff depending on the date data
    }
  }); 
}
于 2010-06-06T10:59:40.520 に答える