【发布时间】:2020-04-09 17:06:25
【问题描述】:
使用 Bootstrap 框架 3.3.7 我有这样的代码:
$('#field_submit').click(function() {
//omitted part not relevant
if (counter == 0) {
//non ho riscontrato errori, quindi posso inviare il form
data = $('#new_field').serialize();
$.ajax({
//omitted part not relevant
}).done(function(data) {
//aggiungo il campo creato alla lista dei campi sulla sinistra
if(data.status==200){
//omitted part not relevant
}else{
//non sono riuscito a caricare i dati
$('#modal-text').html('<p class="text-danger">'+data.message+'</p><b>Dati per il debug</b> (saranno inviati in automatico nella mail):<br>');
var risposta = data;
$("#modal-text").append(JSON.stringify(data));
$('#message').modal('show');
$('.segnalazione').click(function(){
if($(this).attr('id')=='error_submit'){
mail= true;
}
//effettuo il caricamento
$.ajax({
url: 'segnalazione.php',
method: 'post',
data: {form:'new_field', valori:risposta, mail: mail},
dataType: 'json'
});
});
}
});
}
});
您可以看到主 ajax 调用是否返回不同于 200 的状态,然后我打开一个模式,显示一些信息并单击两个按钮中的任何一个按钮 (class="segnalazione") 我将一些数据发送到第二个ajax 调用。
模式代码:
<div class="modal fade fade" id="message" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Crea un nuovo campo</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" id="modal-text">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary segnalazione" data-dismiss="modal">Chiudi</button>
<button type="button" class="btn btn-primary segnalazione" id="error_submit" data-dismiss="modal">Invia mail</button>
</div>
</div>
</div>
</div>
考虑这种情况:我打开页面,运行第一个 ajax,显示模式并发送数据。这工作正常。 然后,无需重新加载页面我再次执行此操作,再次显示模式并发送数据。这次我看到两个请求,第一个请求来自上一次调用的数据,第二个请求是正确的数据。 如果我再做一次,我会看到三个调用,第一个调用第一个数据,第二个调用第二个数据,第三个调用正确。 因此,在数据库的第二页中重复三次后,我将获得第一个数据的 3 倍、第二个数据的两倍和第三个数据。
我尝试使用 stopPropagation 但它会阻止模式在单击按钮时关闭(使用 data-dismiss 方法)。
【问题讨论】:
-
我建议将整个
else块移动到一个新函数中并从那里调用它。这样您就不会遇到 Dmitrij 指出的问题,您的代码也会看起来更好并且易于理解!希望对您有所帮助。 -
@LearningEveryday 这只会做一些补充,但不会阻止我的问题(这不是下面答案中指出的问题)。
-
啊!看看你是否可以在调用结束时清除数据变量(或将其分配给另一个变量并清除它)。
-
实际上我的代码中没有任何东西可以使它们持久化。每次执行代码时都会覆盖它们。所以重点是这种缓存的来源
标签: javascript jquery ajax twitter-bootstrap event-propagation