为什么我看到了“;未定义的“;当我在jQuery Mobile中提交表单时,屏幕上会显示


Why am I seeing a value of "undefined" on screen when I submit form in jQuery Mobile?

这是我的contactus.html页面。我正在服务器上提交一个php页面,该页面将获取信息并发送电子邮件,同时表示感谢。当我提交表格时,即使我能收到电子邮件,我在屏幕上看到的都是"未定义的"。

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Contact Us</title> 
    <link rel="stylesheet" href="css/latestjquerymobile.css" />
    <link rel="stylesheet" type="text/css" href="css/jquery.mobile.simpledialog.min.css" />
    <script type="text/javascript" src="js/jquery-1.6.1.min.js"></script>
    <script type="text/javascript" src="js/latestjquerymobile.js"></script>
    <script type="text/javascript" src="js/jquery.mobile.simpledialog.min.js"></script>

    <script type="text/javascript">
    $(document).ready(function() { 
                     $("#contactus").submit(function(event) {
                     alert("page submitted");

 })
});
</script>
</head> 
<body> 
<div data-role="page" data-theme="e" id="contactus">
    <div data-role="header" data-position="fixed">
        <h1>Contact Us</h1>
        <a href="home.html" data-icon="back" class="ui-btn-left" data-ajax="false">Back</a>
        <a href="home.html" data-icon="home" class="ui-btn-right" data-ajax="false">Home</a>
    </div><!-- /header -->
    <div data-role="content">   
    <div align="center">


    <form action="http://testsite.com/contactus.php" name="contactus" id="contactus" method="post">

    <fieldset>

        <div data-role="fieldcontain">
        <label for="name"> Name:</label>    
        <input id="name" name="name" type="text" />
        <label for="email">Email:</label>       
        <input id="email" name="email" type="text" />

        <label for="contact">Contact:</label>   
        <input id="contact" name="contact" type="text" />

        <label for="message">Message:</label>       
        <textarea rows="4" cols="50" id="message" name="message"></textarea>
        <br />
        <button type="submit" name="submit" value="submit-value">Send</button>

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


     <div><br><br>

      <a href="http://www.facebook.com/Apsession"><img src="images/facebook.png" border="0" /></a>
    <a href="http://twitter.com/ApsessionMobile"><img src="images/twitter.png" border="0" /></a>

     </div>


    </div>
    </div><!-- /content -->
</div><!-- /page -->
</body>
</html>

这是服务器上contactus.php的代码

<?php 
$ToEmail = 'test@testemail.com'; 
$EmailSubject = 'Contact Form Submission from testsite.com'; 
$mailheader = "From: ".$_POST["email"]."'r'n"; 
$mailheader .= "Reply-To: ".$_POST["email"]."'r'n"; 
$mailheader .= "Content-type: text/html; charset=iso-8859-1'r'n"; 
$MESSAGE_BODY = "Name: ".$_POST["name"]."<br>"; 
$MESSAGE_BODY .= "Email: ".$_POST["email"]."<br>"; 
$MESSAGE_BODY .= "Contact: ".$_POST["contact"]."<br>";
$MESSAGE_BODY .= "Message: ".$_POST["message"]."<br>"; 
mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure"); 
?>
<html>
<body>
THANK YOU
</body>
</html>

我不确定您为什么看到undefined,但我注意到您没有阻止默认的提交操作。所以你的页面仍然会提交而不是执行JS。

你需要做几件事:

  1. 阻止默认操作(即提交(
  2. 序列化表单数据并通过ajax提交

所以在代码中,它看起来像这样:

$(document).ready(function() { 
    //Cache DOM reference
    var form = $("#contactus");
    form.submit(function(event) {
        //Prevent the form from regular (non-js) submission
        event.preventDefault();
        //Serialize your data, using jQuery to make it easer
        var data = form.serialize();
        //Submit via ajax
        $.post(
          form.attr('action'),
          data,
          function(response) {
            //You should modify your PHP to return a success or error code, then
            //handle appropriately here - eg if (response === 'success") {...
          }    
        );
     });
});

获得未定义值的原因是您发布到无效的jQuery移动页面。因此,请确保服务器返回一个有效的jquery移动HTML页面。

  1. 创建您的jquery移动表单

  2. 设置属性action="/mobile.html"method="post"(或获取(

  3. 然后确保页面mobile.html(或您想称之为的任何页面(返回一个有效的jQuery mobileHTML页面。

如果你不知道什么是有效的jquery移动HTML页面,请查看jquery移动网站。

<script type="text/javascript">
    $(document).ready(function() { 
                     $("#contactus").submit(function(event) {
                     alert("page submitted");

 })
});
</script>

您不需要使用上面的JS编码。只需使用本地提交按钮。并检查以下链接

http://jquerymobile.com/test/docs/forms/forms-sample.html