0

$.post の成功コールバック内に $.post を含める方法はありますか? 最初の $.post が成功しない場合は、プロンプトを求めます。確認された場合は、別の $.post をもう一度呼び出します

私のコードは以下の通りです

postvars = {
                order_no:order_no,
                tracking_no:tracking_no,
                continue_submit: false
            };  

url =  '../shipment/shipment_submit_order_status_ajax';  

  $.post(url, postvars, function(data1) {
        if(data1.status == "success")
        {
            alert("Order submitted 1");
        }
        else if(data1.status != "success")
        {
            var r = confirm("The Order is NOT ready to be shipped. Please check the order again. Are you sure you want to continue to ship this?");
            if(r)
            {
                //Submit order
                postvars = {
                    order_no:order_no,
                    tracking_no:tracking_no,
                    continue_submit: true
                };  

                url =  '../shipment/shipment_submit_order_status_ajax';

                $.post(url, postvars, function(data) { 
                    if(data.status == "success")
                    {
                        alert("Order submitted 2");
                    }
                }, 'json');  
            }
        }

    }, 'json');

2番目のajax呼び出しを実行する前に最初に確認ダイアログを表示するのではなく、両方の呼び出しを実行しています。誰にも解決策はありますか?前もって感謝します

4

2 に答える 2

2

jQuery で defered オブジェクトを使用することをお勧めします。

function ajaxMe(data){
    var df = $.Deferred();
    $.post('my_const_url', data, function(resp){
        if(resp.status !== 'success'){
            df.resolve(other_data);
        }else{
            df.reject(other.data);
        }
    }, 'json');
    return df.promise();
}

ajaxMe(postvars).done(function(response_data){
    ajaxMe(whatever_you_want);
}).fail(function(){
    var r = confirm("Do you really want it ?");
    if(r){
       ajaxMe(some_data);
    }
});
于 2013-03-16T04:31:13.650 に答える
-2

「if(r)」の代わりに「if(true===r)」を使用

javascript では、「if(r)」は変数「r」が定義されているかどうかを意味するためです。この場合、この変数 'r' が定義されているため、'if' 部分が満たされます。

于 2013-03-16T04:24:57.103 に答える