我试图在这里用js写一个回调函数。问题是返回的值不正确。 ajax调用中的变量“ d”包含正确的数据。但是done(..)函数中的变量a没有。有人知道如何为d赋值吗?

    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);
    });


谢谢!!!

最佳答案

对每个实例使用then()returnsuccess中不执行任何操作,因为它不是承诺链的一部分

基本例子

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

关于javascript - Ajax请求中的JavaScript回调函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43325719/

10-12 05:58
查看更多