【发布时间】:2020-03-17 22:22:42
【问题描述】:
我内部有多个ajax函数,但只执行第一个ajax请求,我不知道为什么!我添加了一些警报字段,看看它有多远。 我为此使用 django 环境。 因此,例如,当单击 bidnow-BTN 时,应该执行此 jquery,但由于某种原因,在第一个 ajax 请求之后,页面实际上会刷新并添加类似 /?bidPrice=100001 到页面 url 的末尾。这不应该发生。
$("#bidnow-BTN").click(function () {
var varurl = document.URL
var itemId = varurl.split(/\//)[4]
$.ajax({
url: "{% url 'User ID' %} ",
method: "GET",
success: function (data) {
var varurl = document.URL
var itemId = varurl.split(/\//)[4]
var username = data.username
alert("Got here: " + username)
$.ajax({
url: "{% url 'Bidding ID' %} ",
method: "GET",
success: function (data) {
alert("Does NOT reach this point")
for (var i = 0; i < data.users.length; i++) {
if (data.users[i].username == username) {
var id = data.users[i].id
}
else {
}
}
$.ajax({ // kinda checked
url: "{% url 'List Items' %} ",
method: "GET",
success: function (data) {
var varurl = document.URL
var itemId = varurl.split(/\//)[4]
for (var i = 0; i < data.items.length; i++) {
if (itemId == data.items[i].id) {
var currentPrice = data.items[i].higestBid
}
else {
}
if (parseFloat($('#bidAmount').val()) <= currentPrice) {
alert("Please enter a higher amount")
abort()
}
if (parseFloat($('#bidAmount').val()) > currentPrice) {
var post_data = {
'itemId': itemId,
'userID': id,
'bid': (parseFloat($('#bidAmount').val()) || 0)
};
$.ajax({ //checked
url: "{% url 'Modify Bid' %} ",
contentType: 'application/json; charset=utf-8',
dataType: 'json',
method: "PUT",
data: JSON.stringify(post_data),
success: function (data) {
$('#ItemCurrentPrice').empty()
$('#ItemCurrentPrice').append("£" + data.highestBid)
$.ajax({ //checked
url: "{% url 'Bidding ID' %} ",
method: "GET",
success: function (data) {
for (var i = 0; i < data.users.length; i++) {
if (data.users[i].username == username) {
var id = data.users[i].id
}
else {
}
}
var post_data = {
'itemId': itemId,
'userID': id,
'bid': (parseFloat($('#bidAmount').val()) || 0)
};
$.ajax( //checked
{
url: "{% url 'List Bid' %} ",
contentType: 'application/json; charset=utf-8',
dataType: 'json',
method: "PUT",
data: JSON.stringify(post_data),
success: function (data) {
}
}) //Checked
}
}) //Checked
}
}) //Checked
}
}
}
})
}
})
}
})
})
【问题讨论】:
-
代码不可读和不可维护,我建议你把东西分成不同的功能
-
@krummens 如果他在成功回调中调用它们,为什么需要使其同步?