Ajax结果评估

时间:2014-01-29 19:13:23

标签: jquery ajax forms

我有一个HTML,我想在它被提交之前验证它,并且我在验证中使用了ajax,我希望它在ajax结果为“OK”时提交表单并显示警告if else ,结果肯定是“OK”,但它没有提交表格,请帮助!!


这是我使用的HTML代码

 <form action="newplan.php" onsubmit="return validateplan();" method="post">
                      <TABLE style="font-size: small;width: 100%;background:  #7cdafe;">
    <Tr>
    <td>
        Planer Name <input type="text" disabled value="<?=$me['name']?>">
    </TD>
    <td>
        Title
        <input type="text" id="title" name="title" placeholder="Title this plan">
             </td>
             <tD>
        <LABEL for="month">Month</LABEL>
        <SELECT id="month" name="month">
            <OPTION value="0">Choose</OPTION>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
            <option value="6">6</option>
            <option value="7">7</option>
            <option value="8">8</option>
            <option value="9">9</option>
            <option value="10">10</option>
            <option value="11">11</option>
            <option value="12">12</option>
        </SELECT>

        <LABEL for="week">Week</LABEL>
        <select name="week" id="week">
            <OPTION>Choose</OPTION>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
        </select>
    </td>
</tR>
</TABLE>
<div>
         <LABEL for="subdate">Submition Date</LABEL><input type="text" id="subdate"         name="subdate" value='<?=date("F d,Y")?>'></input>
         <input type="submit" name="go" value="Save">
         <input type="test" id="clar" value="0">
         <input type="submit" name="go" value="Submit">
         </div>
         </form>

这是js,我已经在页面的头部链接了jquery

JS


<script type="text/javascript">

    function validateplan(){
        var title = $("#title").val();
        var month = $("#week").val();
        var subdate = $("#subdate").val();
        var week = $("#week").val();

        $.ajax({
            url: 'ajax/plan_validate.php',
            data: {title: title,month: month,subdate: subdate,week: week},
            success: function(data){
                if (data == 'OK'){
                    alert("We are OK so far");
                    return true;
                }
                else
                {
                    alert(data);
                }

            },
            error: function(){
               alert("There is something wrong");
            }
        });

        return false;
    }
 </script>

2 个答案:

答案 0 :(得分:0)

以下是您的代码正在执行的操作:

请澄清这些假设是否不正确。

  1. 用户填写表单,点击提交。
  2. 调用Javascript validateplan()函数。
  3. validateplan()将表单数据的AJAX请求发送到ajax/plan_validate.php
  4. plan_validate.php处理输入并检查错误。回复回复。
  5. 您的成功功能是检查数据是否等于裸字符串'OK'。
  6. 您的数据没有其他任何内容。
  7. plan_validate.php应该做什么?只是错误检查表格?或者实际上对数据做些什么?你说:

      

    结果肯定是“OK”,但它没有提交表格。

    您是否看到了alert("We are OK so far");?如果是,那么您提交的是表单,但仅提交给plan_validate.php,而不是表单newplan.php。如果您希望将表单提交给newplan.php,那么您需要对其进行编程才能执行此操作。

    表单onsubmit="return validateplan();"中的代码告诉浏览器使用validateplan()的返回值来决定是否提交action属性。

    validateplan()函数的最后一行是return false;,因此validateplan始终返回false,表单永远不会提交。当您从成功函数中return true;时,您只返回来自匿名函数而不是 validateplan函数。

    如果您希望在收到newplan.php的确定回复后将表单提交至plan_validate.php,则需要在确定提醒后在success: function中添加该表单。

    This question是一个合理的起点,可以确定如何完成剩余的工作。既然你已经引用了jQuery(至少,这是我假设你的$调用的用途),你可以查看[。on()][2] and [。submit()` ] 3帮助您使用jQuery的一些快捷方式。

    注意:您可能不希望将validateplan()更改为return true;,因为无论来自哪个回复,您都会将表单提交至newplan.php plan_validate.php。这是因为您的AJAX是异步的,它通过validateplan()在其余流程之外执行。

    注2:如果您要将表单更改为onsubmit=validateplan()而不包含return,则某些浏览器会忽略validateplan的返回值并始终提交表格。只是需要注意的事情。

答案 1 :(得分:0)

Ajax是异步的,因此在服务器端进行验证之前,它返回false。这就是为什么你的表格没有提交。

而不是<form action="newplan.php" onsubmit="return validateplan();" method="post">

您可以在ajax成功函数中提交表单,然后显示警报; 试试这个 : 像这样改变你的表格标签和

<form action="newplan.php" method="post" id="myform">

在ajax成功函数中调用submit

$( "#myform" ).submit();