ajax请求中的Javascript回调函数
我试图在这里用js编写一个回调函数。问题是返回的值不正确。ajax调用中的变量d包含正确的数据。但是变量a在。。功能,而不是。有人知道如何给a赋值吗ajax请求中的Javascript回调函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,我试图在这里用js编写一个回调函数。问题是返回的值不正确。ajax调用中的变量d包含正确的数据。但是变量a在。。功能,而不是。有人知道如何给a赋值吗 function render_confirmation_email(data, cart, delivery_date){ console.log("Render confirmation email") var purchaseTable = "<table>" for (va
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);
});
谢谢你 您正在返回d
你不必使用a.done
a应该有数据。不要把问题复杂化
$.ajax({
dataType: "text",
type: 'POST',
url: 'include/ajax.php',
data: { action: 'functionname', value:value },
beforeSend:function(){
},
success:function(data){
},
error:function(){
}
});
然后对每个实例使用。回报对成功没有任何作用,因为它不是承诺链的一部分
基本示例
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]
})
done是一个承诺的回调函数,它将响应数据作为参数传递。您可以将其用作成功选项的替代品
我认为您可以将一个完成的回调传递给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);
});
我认为函数完成回调
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。
如下
{
购物车:
交货日期:,
.....
}
我最终得到了这个。谢谢你的帮助!:
回答:。然后与您的问题无关,但您确实不应该使用async:Falsnoted and removed:它是在解决我的问题的尝试失败后留在那里的。return对成功没有任何作用
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);
});
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();
}
})
}
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);
});