0

私の機能は非常に単純で、ここで見つけたものに基づいています。それでも、私はそれを機能させることができないようです。何が問題なのですか?

function ajax(url) {
    var result;
    $.ajax({
        url: url,
        success: function(data) {
            result = data;
            //$('#test').html(data);
            }
        });
    return result;
    }

関数はデータを取得しています。コメント化されたコードのコメントを解除して呼び出すと、#test 要素内にデータが表示されます。しかし、私が書くならば

var test = ajax('my-url.php');
$('#test').html(test);

それからそれは動作しません。私の推測では、何らかの理由で、「データ」のデータが変数「結果」に格納されていません。しかし、その理由も解決方法もわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

2

result変数は、AJAX 呼び出しが終了するまで変更されません。この時点で、関数ajaxは既に返されています。これがコールバックの要点であり、イベントが終了したときに実行されるタスクをスケジュールする機能です。

Javascript (ブラウザ内) は本質的に非同期です。

別の方法として、呼び出しにパスして終了するまで待機することもできますがasync: false$.ajax元のスタイルに戻す方が理にかなっています。

編集:あなたがしていることは で達成できるようです$.load()

于 2012-07-19T00:52:51.850 に答える
1

呼び出しを非同期で実行しないように変更する$.ajaxと、期待どおりに動作します。

function ajax(url) {
  var result;
  $.ajax({
    async: false,
    url: url,
    success: function(data) {
        result = data;
        //$('#test').html(data);
        }
    });
  return result;
}

$.ajax関数はすぐに戻り、AJAX 呼び出しが戻るのを待ちません。

于 2012-07-19T00:52:48.690 に答える