2017-04-10 226 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); 
     }); 

我结束了这一点。谢谢您的帮助! :)

答:。那么()

相关问题