Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript .submit()在$.ajax请求期间不工作_Javascript_Php_Jquery_Ajax_Forms - Fatal编程技术网

Javascript .submit()在$.ajax请求期间不工作

Javascript .submit()在$.ajax请求期间不工作,javascript,php,jquery,ajax,forms,Javascript,Php,Jquery,Ajax,Forms,恐怕我不能就这个问题发表JSFIDLE,我相信这只是一个没有通过success:函数传递正确参数的问题,但是运行了这个脚本的表单不会提交两次 我们希望通过ajax请求将信息提交到email_script.php,然后通过表单的默认操作标记提交信息 它正确地提交了ajax请求,但是第二次没有提交,尽管控制台在success:函数中记录了succ=1 表格HTML: 更好的用法正如Rory在注释中提到的,您没有将事件对象传递给处理程序 $(function() { $('#submit').

恐怕我不能就这个问题发表JSFIDLE,我相信这只是一个没有通过success:函数传递正确参数的问题,但是运行了这个脚本的表单不会提交两次

我们希望通过ajax请求将信息提交到email_script.php,然后通过表单的默认操作标记提交信息

它正确地提交了ajax请求,但是第二次没有提交,尽管控制台在success:函数中记录了succ=1

表格HTML:


更好的用法正如Rory在注释中提到的,您没有将事件对象传递给处理程序

$(function() {
    $('#submit').click(function(event) {
        var dataObject = "email=<?=$email?>&accName=<?=$accName?>&listName=<?=$listName?>";
        console.log(dataObject);
        event.preventDefault();
        $.ajax({
          url: "email_script.php",
          data : dataObject,
          type : "GET",
          success: function(){
            $("#subscribe_form:submit").trigger("submit");
            var succ = "1";
            console.log(succ)
            alert('success');
          }
        });
    });

});

你试过在函数上使用.on吗

$(document).on('click','#submit', function(event) {

您在执行ajax请求之前停止了提交事件,因此,要进行提交,必须重新执行它。您确实尝试过这样做,但是您实际做的是重新触发jquery提交事件处理程序。要提交表单,请选择表单节点并直接触发其submit方法,该方法绕过jquery绑定事件

$(function() {
    $("#subscribe_form").submit(function(event) {
        var dataObject = "email=<?=$email?>&accName=<?=$accName?>&listName=<?=$listName?>";
        console.log(dataObject);
        $.ajax({
            url: "email_script.php",
            data : dataObject,
            type : "GET",
            success: function(){
                $("#subscribe_form").get(0).submit();
                var succ = "1";
                console.log(succ)
                alert('success');
            }
        });
        event.preventDefault();
    });    
});

我还切换到正确使用submit事件,如果改用click,用户可以通过在输入上按enter键绕过click事件处理程序。此外,从您的按钮上删除id非常重要!并将其设置为提交按钮。

要触发默认表单提交,请使用[0]。在表单的jQuery对象上提交,同时记住将事件传递给处理程序。将event.preventDefault放在顶部始终是一种良好的做法

$(function() {
    $('#subscribe_form').submit(function( event ) {
        event.preventDefault();
        var dataObject = "email=<?=$email?>&accName=<?=$accName?>&listName=<?=$listName?>",
        that = $(this);
        console.log(dataObject);
        $.ajax({
          url: "email_script.php",
          data : dataObject,
          type : "GET",
          success: function(){
            that[0].submit();
            var succ = "1";
            console.log(succ);
            alert('success');
          }
        });
    });
});
编辑


与其侦听submit按钮上的click事件,不如侦听表单上的submit事件。这样,event.preventDefault将更加一致地工作。我已经在变量中缓存了表单jQuery对象,并在成功回调中使用了它。我还在console.logsucc之后添加了一个分号,JavaScript不需要分号,但解释器有时可能会遇到问题。始终正确地使用它。

您调用的是event.preventDefault,但您没有将事件传递给处理程序。我希望我对jQuery有足够的了解,知道这意味着什么。你能在回答中详细说明一下吗,Rory?我没有把它作为一个答案发布,因为我不是100%,它会解决你的问题。但是,为了使用preventDefault:$'submit'。clickfunctionevent,您需要在click handlers参数中包含该事件{event.preventDefault;//您的代码的其余部分……您在第一次ajax调用中并没有实际提交表单,因为您正在对页面加载上的值进行硬编码。您的表单中是否填写了任何值?它是一个具有硬编码输入的表单,并且有一个复选框,它们确认后点击提交。我是否需要通过t传递复选框的值他也是ajax请求吗?这会整理代码,尽管表单的默认操作没有发生,ajax请求仍然成功完成…直到我们要求它提交表单。仍然得到相同的非操作。此方法以及Kevin B的现在抛出了一个未捕获类型错误:我们认为对象不是da上的函数错误taObject。你能给我们看一下你的表单的HTML吗?这两个实际上是等价的。这是为你添加的。太好了!!你能把服务器传递给你的浏览器的HTML发布出来吗?那会更有用,嗯?对不起…修改了。
$(document).on('click','#submit', function(event) {
$(function() {
    $("#subscribe_form").submit(function(event) {
        var dataObject = "email=<?=$email?>&accName=<?=$accName?>&listName=<?=$listName?>";
        console.log(dataObject);
        $.ajax({
            url: "email_script.php",
            data : dataObject,
            type : "GET",
            success: function(){
                $("#subscribe_form").get(0).submit();
                var succ = "1";
                console.log(succ)
                alert('success');
            }
        });
        event.preventDefault();
    });    
});
$(function() {
    $('#subscribe_form').submit(function( event ) {
        event.preventDefault();
        var dataObject = "email=<?=$email?>&accName=<?=$accName?>&listName=<?=$listName?>",
        that = $(this);
        console.log(dataObject);
        $.ajax({
          url: "email_script.php",
          data : dataObject,
          type : "GET",
          success: function(){
            that[0].submit();
            var succ = "1";
            console.log(succ);
            alert('success');
          }
        });
    });
});