1

今日は「sendData」という Javascript 関数を作成しています。

これは、ajax ステートメント全体を書き出す代わりに、簡単にするために使用されます。

とにかく、それが非同期であることはわかっています。何も返さないのではなく、どのように待って値を返すことができるのか疑問に思っていました。これが私が持っているものです。

   function returnData(data)
{
    alert(data + " ddd");
    return data;
}

function sendData(data,file) {
    var a = ""
    $.ajax({
        url: file,
        data: data,
        type: "POST",
        success: function(newData)
        {
            a = newData;

        }
    })
    returnData(a);
}

これでうまくいくと思ったのですが、うまくいきません。それが戻ってくるのを待つ方法を知っている人はいますか?

最終コード

function sendData(data,file) {
    var a = ""
    $.ajax({
        url: file,
        data: data,
        type: "POST",
        async:false,
        success: function(newData)
        {
            a = newData;
        }
    })
    return a;
}
4

4 に答える 4

3

非同期に保ちたい場合は、 内で関数を呼び出しますsuccess。つまり、次のようになります。

function returnData(data)
{
    alert(data + " ddd");
    return data;
}

function sendData(data,file) {
    var a = ""
    $.ajax({
        url: file,
        data: data,
        type: "POST",
        success: function(newData)
        {
            returnData(newData);
        }
    })
}

このようにして、何かを送信するまで関数は呼び出されません。それ以外の場合は、パラメーターで続行する前に応答を待機するように設定しasync:false,ます。

于 2013-04-22T22:34:14.333 に答える
2

オプションを設定するasync:falseと、コールバックが戻るのを待ちます。

$.ajax({
    ...
    async:false,
    ...
})
于 2013-04-22T22:32:09.047 に答える
2

次のこともできます。

function sendData(data,file) {
    var a = ""
    $.ajax({
        url: file,
        data: data,
        type: "POST",
        success: function(newData)
        {
            returnData(newData);

        }
    })
}

これは、コールバックが使用される一般的な方法です。success 関数、成功時に実行するコードです。

また、promise を調べることもできます: http://api.jquery.com/promise/

于 2013-04-22T22:33:02.500 に答える
2

使うかもしれませんか?

         function sendData(data,file) {
           var a = ""
           $.ajax({
              url: file,
              data: data,
              type: "POST",
              success: function (newData) {
                 a = newData;
                 returnData(a);

              }
           })
           return;
        }
于 2013-04-22T22:37:35.033 に答える