95

jQueryajaxを使用してサーバーからデータを取得したいと思います。

.ajax()次のように、成功コールバック関数の定義をブロックの外に置きたいと思います。dataFromServerでは、成功コールバックから返されたデータを使用できるように、次のように変数を宣言する必要がありますか?

私はほとんどの人が.ajax()ブロック内で成功コールバックを定義するのを見てきました。それで、成功コールバックを外部で定義したい場合、次のコードは正しいですか?

var dataFromServer;  //declare the variable first

function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData(dataFromServer)
    })
}

function handleData(data) {
    alert(data);
    //do some stuff
}
4

8 に答える 8

202

jQuery 1.5(2011年1月)以降、これを行う「新しい」方法は、successコールバックを渡す代わりに、遅延オブジェクトを使用することです。の結果を返しなどのメソッドを$.ajax使用して、呼び出しの外部にコールバックを追加する必要があります。.done.fail$.ajax

function getData() {
    return $.ajax({
        url : 'example.com',
        type: 'GET'
    });
}

function handleData(data /* , textStatus, jqXHR */ ) {
    alert(data);
    //do some stuff
}

getData().done(handleData);

これにより、コールバック処理がAJAX処理から切り離され、元の関数を変更することなく、複数のコールバック、失敗コールバックなどを追加できますgetData()。後で完了する一連のアクションからAJAX機能を分離することは良いことです!

延期により、複数の非同期イベントの同期がはるかに簡単になります。これは、success:

たとえば、複数のコールバックとエラーハンドラーを追加し、タイマーが経過するのを待ってから続行できます。

// a trivial timer, just for demo purposes -
// it resolves itself after 5 seconds
var timer = $.Deferred();
setTimeout(timer.resolve, 5000);

// add a done handler _and_ an `error:` handler, even though `getData`
// didn't directly expose that functionality
var ajax = getData().done(handleData).fail(error);

$.when(timer, ajax).done(function() {
    // this won't be called until *both* the AJAX and the 5s timer have finished
});

ajax.done(function(data) {
    // you can add additional callbacks too, even if the AJAX call
    // already finished
});

jQueryの他の部分も遅延オブジェクトを使用します-jQueryアニメーションを他の非同期操作と非常に簡単に同期させることができます。

于 2013-02-07T15:22:59.307 に答える
95

使用するだけです:

function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData
    })
}

プロパティは関数へのsuccess参照のみを必要とし、データをパラメーターとしてこの関数に渡します。

方法が宣言されhandleDataているため、このように関数にアクセスできます。handleDataJavaScriptは、実行する前に関数宣言のコードを解析するため、実際の宣言の前にあるコードで関数を使用できます。これは巻き上げとして知られています。

ただし、これは次のように宣言された関数にはカウントされません。

var myfunction = function(){}

それらは通訳がそれらを通過したときにのみ利用可能です。

関数を宣言する2つの方法の詳細については、この質問を参照してください

于 2013-02-07T15:21:28.797 に答える
15

スクリプトの外部でパラメータを定義している理由がわかりません。それは不要です。コールバック関数は、戻りデータをパラメーターとして自動的に呼び出されます。sucess:IEの外でコールバックを定義することは非常に可能です

function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData
    })
}

function handleData(data) {
    alert(data);
    //do some stuff
}

handleData関数が呼び出され、ajax関数によってパラメーターが渡されます。

于 2013-02-07T16:00:14.670 に答える
6

サクセスハンドラーを次のように書き直してみてください。

success : handleData

ajaxメソッドのsuccessプロパティには、関数への参照のみが必要です。

handleData関数では、最大3つのパラメーターを受け取ることができます。

object data
string textStatus
jqXHR jqXHR
于 2013-02-07T15:22:05.287 に答える
5

私は書くだろう:

var handleData = function (data) {
    alert(data);
    //do some stuff
}


function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData
    })
}
于 2013-02-07T15:22:22.503 に答える
2

変数を宣言する必要はありません。Ajax成功関数は自動的に最大3つのパラメーターを取ります:Function( Object data, String textStatus, jqXHR jqXHR )

于 2013-02-07T15:22:31.040 に答える
2

数時間後、それで遊んで、ほとんど鈍くなる。奇跡が私に来ました、それはうまくいきます。

<pre>


var listname = [];   


 $.ajax({
    url : wedding, // change to your local url, this not work with absolute url
    success: function (data) {
       callback(data);
    }
});

function callback(data) {
      $(data).find("a").attr("href", function (i, val) {
            if( val.match(/\.(jpe?g|png|gif)$/) ) { 
             //   $('#displayImage1').append( "<img src='" + wedding + val +"'>" );
                 listname.push(val);
            } 
        });
}

function myfunction() {

alert (listname);

}

</pre>
于 2016-08-21T05:34:56.160 に答える
-1

コンポーネント、つまりAngular JSコード:

function getData(){
    window.location.href = 'http://localhost:1036/api/Employee/GetExcelData';
}
于 2018-06-05T09:30:04.187 に答える