2017-04-10 138 views
0

我想在這裏用js寫一個回調函數。問題是返回的值不正確。 ajax調用中的變量「d」包含正確的數據。但done(..)函數中的變量a沒有。有誰知道如何分配d的值?Ajax請求中的Javascript回調函數

function render_confirmation_email(data, cart, delivery_date){ 
     console.log("Render confirmation email") 
     var purchaseTable = "<table>" 
     for (var i = 0; i < cart.length; i++) { 
      console.log(i); 
      var concept = cart[i].name; 
      var price = cart[i].price; 
      purchaseTable += "<tr>" 
      purchaseTable += "<td>" + concept + " - </td>" 
      purchaseTable += "</tr>" 
      purchaseTable += "<tr>" 
      purchaseTable += "<td>" + price + " kr\n</td>" 
      purchaseTable += "</tr>" 
     } 

     purchaseTable += "</table>" 
     purchaseTable += "<br> <p>It will be delivered on " + delivery_date + "</p>" 

     var tempDom; 
     tempDom = $('<div></div>').append(data); 
     tempDom.find('#purchaseTable').append(purchaseTable); 
     return tempDom.text() 
    } 


    function get_confirmation_email(cart, delivery_date, render_confirmation_email) { 

     return $.ajax({ 
      type: "GET", 
      url:"/confirmation_email", 
      async: false, 
      success:function(data) { 
       console.log("success"); 
       // render_confirmation_email called when data is ready 
       var d = (render_confirmation_email(data, cart, delivery_date)); 
       console.log("Rendering done") 
       console.log(d) 
       return d 
      } 
     }); 
    } 

    var a = get_confirmation_email(JSONcart, form.querySelector('input[name=deliverydate]').value, render_confirmation_email); 
    a.done(function(data) { 
     console.log("Function done"); 
     console.log(data); 
    }); 

謝謝!

+1

無關您的問題,但你應該真的不使用'異步:FALSE' –

+0

記錄並刪除:)它是從一個失敗的嘗試離開那裏來解決我的問題。 – k1nda

+0

'return'在'success'中不起作用 – charlietfl

回答

1

對於每個實例使用then()。一個return確實沒有什麼success,因爲它不是諾言鏈

基本例如

function doAjax() { 
    // sample data that will be returned 
    var json = '{"foo":[1,2,3]}' 

    return $.ajax({...}).then(function(resp){ 
    // return to next "then()" in promise chain 
    return resp.foo 
    }) 
} 


doAjax().then(function(data){ 
    console.log(data) // [1,2,3] 
}) 

DEMO

0

您要退回d

var a = get_confirmation_email(JSONcart,form.querySelector('input[name=deliverydate]').value, render_confirmation_email); 

您不必使用a.done();

a應該有數據。

0

不要複雜化。

$.ajax({ 
     dataType: "text", 
     type: 'POST', 
     url: 'include/ajax.php', 
     data: { action: 'functionname', value:value }, 
     beforeSend:function(){ 

     }, 
     success:function(data){ 


     }, 
     error:function(){ 


     } 
    }); 
0

jqXHR.done()的一部分,是一個承諾的回調讓作爲傳遞的響應數據論據。您可以使用它作爲替代success選項。

var a = get_confirmation_email(JSONcart, form.querySelector('input[name=deliverydate]').value, render_confirmation_email); 
a.done(function(data) { 
    var d = (render_confirmation_email(data, cart, delivery_date)); 
}); 
0

我想你可以將完成的回調傳遞給get_confirmation_email函數並獲取數據。

例如:

function get_confirmation_email(cart, delivery_date, render_confirmation_email,done) { 

    return $.ajax({ 
     type: "GET", 
     url:"/confirmation_email", 
     async: false, 
     success:function(data) { 
      console.log("success"); 
      // render_confirmation_email called when data is ready 
      var d = (render_confirmation_email(data, cart, delivery_date)); 
      console.log("Rendering done") 
      console.log(d) 
      done(d); 
     } 
    }); 
} 

get_confirmation_email(JSONcart, form.querySelector('input[name=deliverydate]').value, render_confirmation_email,function(data) { 
    console.log("Function done"); 
    console.log(data); 
}); 
0

我覺得功能得到完成回調

function get_confirmation_email(cart, delivery_date, render_confirmation_email,done_callback) { 
    $.ajax({ 
     type: "GET", 
     url:"/confirmation_email", 
     async: false, 
     success:function(data) { 
      console.log("success"); 
      // render_confirmation_email called when data is ready 
      var d = (render_confirmation_email(data, cart, delivery_date)); 
      console.log("Rendering done") 
      console.log(d) 
      return d 
     }, 
     complete : function(){ 
      if(typeof done_callback === "function") done_callback(); 
     } 
    }) 
} 

和 功能有很多爭論。所以你改變參數obj。 像下面 { 車: 「」 DELIVERY_DATE: 「」, ..... }

0
function render_confirmation_email(data, cart, delivery_date) { 
console.log("Render confirmation email") 
var purchaseTable = "<table>" 
var tempDom; 
tempDom = $('<div></div>').append(data); 
tempDom.find('#purchaseTable').append(purchaseTable); 
return tempDom.html() 
} 


function get_confirmation_email(cart, delivery_date, render_confirmation_email) { 
    return $.ajax({ 
     type: "GET", 
     url: "/confirmation_email", 
     success: function(data) { 
      console.log("success"); 
     } 
    }).then(function(resp) { 
     return render_confirmation_email(resp, cart, delivery_date) 
    }); 
} 

var a = get_confirmation_email(JSONcart, form.querySelector('input[name=deliverydate]').value, render_confirmation_email); 
     a.done(function(datababy) { 
      // data contains the email 
      console.log("Function done"); 
      console.log(datababy); 
     }); 

我結束了這一點。謝謝您的幫助! :)

答:。那麼()