7

ajax呼び出しが失敗したときにBootstrap x-editableが編集されたフィールドを更新しないようにするにはどうすればよいですか?

関数を URL として渡しています。

$('.order-price').editable({
    type: "text",
    title: "Order Price",
    url: function (params) {
        var orderID = $(this).data("order-id");
        var data = "OrderID=" + orderID + "&Price=" + params.value;

        $.ajax({
            type: 'post',
            url: '/Trades/SetOrderPrice',
            data: data,
            async: false,
            error: function (xhr, ajaxOptions, thrownError) {
                return false;
                // Do I return something here instead of false?

            }

        })
    }
});
4

6 に答える 6

4

コールバックで例外をスローして x-editable がそれ自体をキャッチするか、「成功」イベントを使用して成功関数で空の文字列を返すかの 2 つのオプションがあります。

于 2014-03-18T16:23:17.343 に答える
0

'url' オプションの関数の最後で Deffered オブジェクトの promise を返します。これを返すと、その Deferred オブジェクトで解決が実行されるまで、クライアント側のデータの値を変更しないように x-editable に指示します。reject() が実行されてしまうと、古い値が残ります。

url: function (params) {

    /***ADD DEFERRED***/
    var d = new $.Deferred()
    var orderID = $(this).data("order-id");
    var data = "OrderID=" + orderID + "&Price=" + params.value;

    $.ajax({
        type: 'post',
        url: '/Trades/SetOrderPrice',
        data: data,
        async: false,
        success: function(data, textStatus, jqXHR) {
           /***RESOLVE THE DEFERRED OBJECT***/
           d.resolve(); 
        },
        error: function (xhr, ajaxOptions, thrownError) {
            /***REJECT IF ERROR OCCURRED***/
            d.reject(thrownError);
            //d.reject(''); //You could also return just an empty string, but must return a string


        }

    })

    /*** RETURN A PROMISE ***/
    return d.promise();
}
于 2016-09-18T22:45:09.877 に答える