我有这个小小的AJAX电话:
$('#brick-mixer-form').submit(function(e) {
e.preventDefault();
$("#mix-bricks-submit").addClass("load");
$("#mix-bricks-submit").attr("value", "Blander sten..");
var form_data = $("#brick-mixer-form").serialize()
$.ajax({
type: "GET",
url: "build.php",
data: form_data,
dataType: 'text',
async: false,
success: function(data) {
$(".active").attr('src', 'build.php?'+form_data+'').load(function() {
$("#mix-bricks-submit").removeClass("load");
$("#mix-bricks-submit").attr("value", "Bland igen");
$("#bricks-selected").attr("value", form_data);
$("#pdf_saver").css("display", "block");
});
}
});
});
在谷歌浏览器中,这种方法非常完美,但在Firefox中,我只能触发一次。
当我再次按下提交按钮“mix-bricks-submit
”时,它将不会再次运行该呼叫。
答案 0 :(得分:1)
根据.load(),url参数不是可选的,因此
$('#brick-mixer-form').submit(function(e) {
e.preventDefault();
$("#mix-bricks-submit").addClass("load");
$("#mix-bricks-submit").attr("value", "Blander sten..");
var form_data = $("#brick-mixer-form").serialize()
$.ajax({
type: "GET",
url: "build.php",
data: form_data,
dataType: 'text',
async: false, //I would avoid forcing synchronous
success: function(data) {
//$(".active").attr('src', 'build.php?'+form_data+'').load(function() {
$("#mix-bricks-submit").removeClass("load");
$("#mix-bricks-submit").attr("value", "Bland igen");
$("#bricks-selected").attr("value", form_data);
$("#pdf_saver").css("display", "block");
//});
}
});
});
或
$('#brick-mixer-form').submit(function(e) {
e.preventDefault();
$("#mix-bricks-submit").addClass("load");
$("#mix-bricks-submit").attr("value", "Blander sten..");
var form_data = $("#brick-mixer-form").serialize()
$.ajax({
type: "GET",
url: "build.php",
data: form_data,
dataType: 'text',
async: false,//I would avoid forcing synchronous
success: function(data) {
$(".active").load('build.php',form_data,function() {
$("#mix-bricks-submit").removeClass("load");
$("#mix-bricks-submit").attr("value", "Bland igen");
$("#bricks-selected").attr("value", form_data);
$("#pdf_saver").css("display", "block");
});
}
});
});
虽然为什么会执行两次ajax语句但我不确定
答案 1 :(得分:0)
试试这个:
设置
$.ajax({
type: "GET",
url: "build.php",
data: form_data,
dataType: 'text',
async: false,
cache: false,
success: function(data) {
$(".active").attr('src', 'build.php?'+form_data+'').load(function() {
$("#mix-bricks-submit").removeClass("load");
$("#mix-bricks-submit").attr("value", "Bland igen");
$("#bricks-selected").attr("value", form_data);
$("#pdf_saver").css("display", "block");
});
答案 2 :(得分:0)
这是作为原始提问者的编辑添加的,我已将其转换为社区维基答案,因为它应该是答案,而不是编辑。
解决方案:
$('#brick-mixer-form').submit(function(e) {
e.preventDefault();
var nowis = new Date();
$("#mix-bricks-submit").addClass("load");
$("#mix-bricks-submit").attr("value", "Blander sten..");
var form_data = $("#brick-mixer-form").serialize()
$.ajax({
type: "GET",
url: "build.php",
data: form_data,
dataType: 'text',
success: function(data) {
$(".active").attr('src', 'build.php?'+form_data+'&tstamp='+ nowis.getMilliseconds() +'').load(function() {
$("#mix-bricks-submit").removeClass("load");
$("#mix-bricks-submit").attr("value", "Bland igen");
$("#bricks-selected").attr("value", form_data);
$("#pdf_saver").css("display", "block");
});
}
});
});
通过将tstamp
参数插入到具有毫秒值的查询中,我将在每次提交表单时强制使用新的图像名称,这似乎会覆盖FF和IE中的缓存问题。