Javascript Ajax加载的表单始终发送输入的第一个值,即使重新加载也是如此
我必须承认,我真的不知道如何解释这个“问题”,我也没有找到一个好的标题,这条线索。无论如何,我会尽量澄清,因为我不确定是否可以添加JSFIDLE或代码片段 让我们从这个项目开始。我正在制作某种DVD库,只在本地网络上使用。有一个页面允许用户向数据库添加新电影。为此,我使用Allocine API(相当于IMDB的法语)来收集电影信息。用户可以输入电影标题(或部分标题)并执行搜索。Allocine的所有相应胶片将出现。 如果用户单击其中一个表单,将打开一个模式窗口,允许用户在发送表单之前添加所需信息。然后使用AJAX发送表单,结果显示在相同的模式窗口中。 当我想添加第二部电影时,问题就出现了。如果我在下次提交表单之前不重新加载页面,第一部电影的值将被发送,而不是第二部电影的值,这让我发疯 下面是用于发送表单的javascript代码Javascript Ajax加载的表单始终发送输入的第一个值,即使重新加载也是如此,javascript,jquery,Javascript,Jquery,我必须承认,我真的不知道如何解释这个“问题”,我也没有找到一个好的标题,这条线索。无论如何,我会尽量澄清,因为我不确定是否可以添加JSFIDLE或代码片段 让我们从这个项目开始。我正在制作某种DVD库,只在本地网络上使用。有一个页面允许用户向数据库添加新电影。为此,我使用Allocine API(相当于IMDB的法语)来收集电影信息。用户可以输入电影标题(或部分标题)并执行搜索。Allocine的所有相应胶片将出现。 如果用户单击其中一个表单,将打开一个模式窗口,允许用户在发送表单之前添加所需信
$("body").on( "click", "#AddFilmButton", function() {
var formDatas = $('#FormAjoutFilm').serialize();
$.ajax({
url : 'Functions.php',
type : 'POST',
data : 'Action=AddFilm&' + formDatas,
cache: false,
dataType : 'html',
success : function(result, statut){
$(result).modal();
},
});
});
您可能会注意到,我正在观看一个按钮单击事件,而不是表单提交事件。这是因为当我使用表单提交事件时,页面一直在刷新,无论我是否使用preventDefault。
我开始怀疑发送值是否因为我使用了这个解决方法而没有被重置。就这样吗
还有什么代码可以帮助您理解我的问题
编辑:就像@intale建议的那样,由于这个模态系统,我在DOM中有多个表单。我在这方面取得了一些进展。首先,我现在可以使用一个合适的事件处理程序,并且我正在观察表单提交事件,因为默认值现在起作用了。
在success函数中,我添加了这一行:$('#FormAjoutFilm').remove()代码>
它的工作原理几乎与预期一致,因为数据只每隔一次提交一次P
不过,它比以前的行为要好,我现在需要修复它。
感谢迄今为止做出贡献的所有人。如果你知道为什么我需要发送两次表格才能让它工作,请告诉我。这就是我现在拥有的。:)
第二次编辑:在缓存清除之后,它看起来终于解决了。感谢所有贡献的人。:) 发送数据后,尝试重置表单:
success : function(result, statut){
$('#FormAjoutFilm')[0].reset();
$(result).modal();
}
这将阻止序列化函数获取第一次提交数据99%的概率,即您在DOM中有重复的ID。我假设您在将第二个表单附加到DOM时没有删除第一个表单(通过执行$(result.modal();
)。因此,当您执行$('#FormAjoutFilm').serialize()
时,将从第一个表单中选取值。是否在模式中定义了#FormAjoutFilm
表单?是否尝试添加$('#FormAjoutFilm').reset()在成功
功能中的code>。@SarathChandra:谢谢你的建议。我以前已经试过了,它一直告诉我类型错误:$(…)。重置不是一个函数
@肯尼:你什么意思@也许你是对的。提交表单时,它被“删除”,因为模式窗口被另一个窗口替换,但我不确定这是否意味着它已从DOM中删除。我试图查看它,但没有看到Firebug。在@SarathChandra建议之后,我已经尝试过了,它一直告诉我TypeError:$(…)。reset不是一个函数
尝试将其更改为$('#FormAjoutFilm')[0]。reset()代码>.TypeError:$(…).reset不是一个函数,仅当您有一个名为“reset”的元素id时才会发生。我想不出还有其他问题。这个版本不再抛出错误,它会删除一些数据。事实上,我从表格中得到了两个值。隐藏输入和文本输入。在您的代码中,文本值被重置,但就像@intale建议的那样,我可能有多个表单实例。我开始怀疑,就我的JS技能而言,这样做是否是个好主意。我应该试试简单点的。
success : function(result, statut){
$('#FormAjoutFilm')[0].reset();
$(result).modal();
}