13

私は次のajaxような電話があります

    $.ajax({
        type: 'POST',
        url: 'addVideo',
        data: {
            video_title: title,
            playlist_name: playlist,
            url: id
            // csrfmiddlewaretoken: '{{ csrf_token }}',
        },
        done: bootstrap_alert.success('video saved successfully'),
        fail: bootstrap_alert.error('There were some errors while saving the video. Please try in a while')
    });

とアクションとして

// setting up alerts on action
bootstrap_alert = function() {}
bootstrap_alert.success = function(message) {
  $('#feature').prepend('<div class="alert alert-success"><a class="close" data-dismiss="alert">×</a><span>'+message+'</span></div>');
}
bootstrap_alert.error = function(message) {
  $('#feature').prepend('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><span>'+message+'</span></div>');
}

フロントエンドがajax呼び出しを行うと、両方の通知が同時に表示されます

video saved successfully
There were some errors while saving the video. Please try in a while

それは私がajax呼び出しを正しく行っていないということですか?

UPDATE
を変更doneするとsuccess、同じ動作になります

// send the data to the server using .ajax() or .post()
        $.ajax({
            type: 'POST',
            url: 'addVideo',
            data: {
                video_title: title,
                playlist_name: playlist,
                url: id
                // csrfmiddlewaretoken: '{{ csrf_token }}',
            },
            success: bootstrap_alert.success('video saved successfully'),
            fail: bootstrap_alert.error('There were some errors while saving the video. Please try in a while')
        });

サーバーの応答はHTTP/1.0" 200 3200fail呼び出されるべきではないと思います

4

5 に答える 5

19

値は関数、コールバックであることが期待されます。しかし、あなたがしていることは、すぐにそれらを呼び出すことです。コールバックを無名関数でラップします。

$.ajax({
  type: 'POST',
  url: 'addVideo',
  data: { video_title: title, playlist_name: playlist, url: id }
}).done(function(){
  bootstrap_alert.success('video saved successfully');
}).fail(function(){
  bootstrap_alert.error('There were some errors while saving the video. Please try in a while');
});
于 2012-08-06T23:25:59.277 に答える
7

done常に呼び出されます。それが起こるはずです。プロパティで成功コードを処理する必要がありsuccessます。

于 2012-08-06T22:55:38.327 に答える
2

(他の人が指摘しているように)無名関数でラップする必要があります。しかし、私は誰もその理由について言及しているのを見たことがありません(これは言及する価値があると思います)。

これを行う必要がある理由は、javascriptがコロンの右側の評価を左側に割り当てるためです。右側を評価するには、最初に関数を実行する必要があります。ただし、右側に無名関数がある場合は、関数自体を左側の参照の値として定義し(javascriptでは、変数の値は関数にすることができます)、関数をそのまま左側に割り当てます。サイド(これは関数への参照になりました)。そのため、ajax呼び出しが完了するまで、評価(関数の実行)を遅らせます。

于 2015-11-11T23:14:46.980 に答える
1

このように変化する

// send the data to the server using .ajax() or .post()
        $.ajax({
            type: 'POST',
            url: 'addVideo',
            data: {
                video_title: title,
                playlist_name: playlist,
                url: id
                // csrfmiddlewaretoken: '{{ csrf_token }}',
            },
            success: function(response, textStatus, jqXHR){
                 // log a message to the console
                 console.log("Hooray, it worked!");
                 bootstrap_alert.success('video saved successfully');
            },

            // callback handler that will be called on error
            error: function(jqXHR, textStatus, errorThrown){
                // log the error to the console
                console.log("The following error occured: "+ textStatus, errorThrown);
                bootstrap_alert.error('There were some errors while saving the video. Please try in a while');
            },
        });
于 2012-08-06T23:30:31.880 に答える
0

と置き換えdoneてみてください?それらがコールバックフックである間、あなたはそれらをオプションとして使用しています。successfailerror

于 2012-08-06T23:01:06.983 に答える