Ajax调用不会传递 - 表单总是由php提交

时间:2013-03-25 17:28:42

标签: php jquery ajax

我有一个默认情况下使用php uri_request提交的表单。 现在我试图添加一个ajax调用来提交表单,但它仍然使用php提交 提交表单的ajax调用是:

$(document).ready(function() {
    $("#contactform").submit(function(e) {
        e.preventDefault();
    });
    $.ajax({
        cache: false,
        type: 'POST',
        data: ("#contactform").serialize(),
        url: 'formfiles/submit.php',
        // for ajax the submit.php is on a             
        success: function() {
            // separate page 
            $('#contactform').fadeOut(200).submit();
            $('#success').delay(200).fadeIn(200);
        }
    });
    return false;

});

和html表单属性是:

<form action="#n" class="active" method="post" name="contactform" id="contactform">   

 e.preventDefault 
在ajax调用开始时

将无法正常工作,但没有ajax它可以工作(只有防止默认!)

代码有什么问题?为什么它不起作用?

提前感谢您提供任何帮助

编辑这里是html {在一个包含文件中(漏洞网站是一个php动态结构)}

<form action="#n" class="active" method="post" name="contactform" id="contactform">

<div class="column">
    <div class="obb" style="<?php echo $color[11];?>">
                    All fields are mandatory
                    </div>
      <div >
<label style="<?php echo $color[0]; ?>"> Name:</label>
    <input class="con_campo required" name="name" value="" id="name" type="text" />

        </div>
        <div >
          <label style=""><?php echo $color[8]; ?>&nbsp;</label>                                                    

  </div>
<div class="fieldcontent prod" id="pr">
                   <label style="">&nbsp;<?php echo $color[2]; ?></label>
<select name="prod" value="" id="products" class="selectx required">
  <option  value=""> -- Select -- </option>
  <option value="1"> ITA</option>
 <option value="2">DE</option>
 <option value="3"> FR</option>
 <option value="4">EN</option>

  </select>

                </div>
            <div class="fieldcontent prod" id="in">
                <label style="<?php echo $color[4]; ?>"> Address:</label>
<input name="address" value="" id="address" class="required" type="text"     />

                        </div>
                         <div class="fieldcontent prod" id="ci">
                        <label style="<?php echo $color[6]; ?>"> City:</label>
   <input name="city" value="" id="city" class="con_campo required" type="text" />

                       </div>
                        <div class="fieldcontent info help" id="me" >
                          <label style="<?php echo $color[10]; ?>">Message:</label>
<textarea id="message" name="message" value="" class="cs_comment required" ></textarea>

                        </div>
                        <div id="code" style="margin-bottom:25px;">
     <label style="<?php echo $color[11]; ?>; width:340px;"></label> 
<input type="text" name="code" class="chapta" size="10" maxlength="7" id="code"/>

                        </div>
            </div>
<div class="column" >
                 <div class="obb">&nbsp;</div>
<div class="fieldcontent prod" id="co">
    <label style="<?php echo $color[1]; ?>">Surname:</label>
<input name="surname" value="" id="surname" class=" required" type="text"/>

            </div>
            <div >
<label style="<?php echo $color[9]; ?>">Email: </label>
<input name="email" value="" id="email" class=" required email" type="text" />

</div>
 <div class="fieldcontent help prod" id="do">
<label style="<?php echo $color[3]; ?>">Domain:</label>
            <span style="font-size:20px; margin-left:30px;"> http://</span>
<input name="domain"  id="domain" class=" required" type="text" value="" />

            </div>
                        <div class="fieldcontent prod" id="re">
    <label style="<?php echo $color[5]; ?>">Region:</label>
   <input name="region" value="" id="region" class=" required" type="text" />

                        </div>
               <div class="fieldcontent prod" id="pa">
<label style="<?php echo $color[7]; ?>" >State:</label>
<input name="state" value="" id="state" class="con_campo required" type="text" />

                        </div>
                    </div>

                  <div>
        <div class="bottom">

<input type="submit" id="submitButton" name="submit" value="submit" />
                        &nbsp;<br /><br /><br />&nbsp;

        </div>
                </form>
 </div></div>

<script> 
$(document).ready(function() {
$("#contactform").submit(function(e){
    $.ajax({
        cache: false,
        type: 'POST',
        data: $("#contactform").serialize(),
        url : 'formfiles/submit.php',   // for ajax the submit.php is on a             
        success: function() {            // separate page 
            $('#contactform').fadeOut(200).submit();
            $('#success').delay(200).fadeIn(200);
        }
    }); 
  });
 });

2 个答案:

答案 0 :(得分:0)

您可以重新构建代码以解决问题,如下所示。您不需要return false;,因为e.preventDefault();会照顾它。

$(document).ready(function () {

    $("#contactform").submit(function (e) {

        e.preventDefault();

        $.ajax({
            cache: false,
            type: 'POST',
            data: $("#contactform").serialize(), //note that $ mark is added
            url: 'formfiles/submit.php', // for ajax the submit.php is on a             
            success: function () { // separate page 
                $('#contactform').fadeOut(200).submit();
                $('#success').delay(200).fadeIn(200);
            }
        });

    });


});

答案 1 :(得分:0)

您在第data: ("#contactform").serialize()行的ajax调用中遇到错误。它应该是data: $("#contactform").serialize()

试试这个:

$(document).ready(function() {
    $("#contactform").submit(function(e){
        $.ajax({
            cache: false,
            type: 'POST',
            data: $("#contactform").serialize(),
            url : 'formfiles/submit.php',   // for ajax the submit.php is on a             
            success: function() {            // separate page 
                $('#contactform').fadeOut(200).submit();
                $('#success').delay(200).fadeIn(200);
            },
            error: function(error_response){
               console.log(error_response);
            }
        }); 
    });
});

更新:

我发现您的代码存在一些问题。

  1. 是否加载了所需的jQuery库?我没有在你粘贴的html中看到这一点。希望你把它包含在标题中左右。
  2. 添加e.preventDefault ();以阻止表单的默认操作,因为输入类型为submit。如果你不认为表格将默认提交方法。
  3. 我没有看到script标记已关闭。您应该关闭script标记,否则它将无效。请参阅下面的更新代码:

    <script type="text/javascript">
       $(document).ready(function() {
        $("#contactform").submit(function(e){
            e.preventDefault();
            $.ajax({
                cache: false,
                type: 'POST',
                data: $("#contactform").serialize(),
                url : 'formfiles/submit.php',   // for ajax the submit.php is on a             
                success: function() {            // separate page 
                    $('#contactform').fadeOut(200).submit();
                    $('#success').delay(200).fadeIn(200);
                }
            }); 
        });
       });
    </script>
    
  4. 新更新

    这里你的ajax调用没有返回任何数据。因此服务器不会知道呼叫是否成功,它将始终转到成功功能。所以你必须检查响应是否成功。从PHP页面返回一些字符串,如success,以显示验证或表单提交及其处理是否成功,否则返回错误。同样在成功回调时,您再次提交表单,因此这将继续作为永无止境的循环。

    请进行以下更改:

    <script type="text/javascript">
       $(document).ready(function() {
        $("#contactform").submit(function(e){
            e.preventDefault();
            $.ajax({
                cache: false,
                type: 'POST',
                data: $("#contactform").serialize(),
                url : 'formfiles/submit.php',   // for ajax the submit.php is on a             
                success: function(response) {            // separate page 
                    if (response == 'success') {
                      //write what you want to do on success
                        $('#success').delay(200).fadeIn(200);
                    } else {
                      //show error
                    }
                }
            }); 
        });
       });
    </script>
    

    希望这有帮助