2013-02-15 115 views
0

我使用jQuery构建了一个简单但工作正常的AJAX表单。表单在提交之前用jQuery验证,然后用PHP再次成功提交。将数据从PHP发送到jQuery

唯一的问题是错误处理。当PHP检查返回所有字段都没问题时,我会显示一条成功消息。如果出现错误,我只会显示“出现错误”。
如何从PHP发回数据到jQuery,这样无效的字段可以被标记为无效?

或者这种形式的错误处理是不必要的,因为动态突出显示需要打开JavaScript并且如果打开JavaScript,表单不能被提交错误?

基本上,我的有效支票看起来像这样(简化当然):

function checkSomething($something) { 

     $valid = true; 

     if (strlen($something) === 0) { 
      $valid = false; 
     } 


     return $valid; 
} 

在脚本的末尾,我不喜欢这样写道:

if (checkSomething($something) && checkThis($this) && checkThat($that)) { 
    echo "success"; 
} else { 
    echo "error"; 
} 

而且在我的JavaScript/jQuery代码它看起来像这样:

$.ajax({ 
    url: "form.php", 
    type: "POST", 
    data: string, 
     success: function (result) { 
      if (result == "success") { 
       alert("success");      
      } else { 
       alert("error"); 
      } 
     } 
}); 
+0

你需要从PHP回显更多东西,告诉你什么失败了,然后用JS处理这个响应,以显示任何适合的消息。发布一些代码并告诉我们你现在是如何设置的,并且它会更容易帮助。 – adeneo 2013-02-15 20:24:46

+0

如果你有jQuery验证并启用了JS,那么你的PHP验证可能永远不会发挥作用(它只是为了预防措施)。换句话说,如果您的客户端验证正在工作,那么您的服务器端验证将不会有任何消息发回。如果您的客户端验证被禁用或绕过,那么您的服务器端验证将接管。如果客户端的JS被禁用,那么无论如何你都不能通过jQuery发回任何消息。也显示代码。 – Sparky 2013-02-15 20:28:39

+0

他应该仍然返回一个JSON响应。如果它被绕过,那并不意味着Javascript被禁用。即使它是,它应该返回JSON响应,如果Javascript被禁用,它将在浏览器中显示为文本。 – crush 2013-02-15 20:36:36

回答

1

您的表单提交有3个步骤:JavaScript验证&提交,PHP的验证/处理和JavaScript上完成(“所以无效字段可以被标记为无效”)

这听起来像你第1步完成,大多数步骤2.

在你的PHP代码中,你应该有一些数据结构,最好是一个数组,它保存哪些值是无效的。您可以通过它echo`ng到浏览器

<?php 
... 
... 
if(count($invalidFieldArray)){ 
    echo json_encode(array('status' => 'Fail', 
          'data' => $invalidFieldArray)); 
}else{ 
    echo json_encode('status' => 'Success'); 
} 

上面的代码将返回成功/失败,以你的JavaScript形式的这些数据返回给浏览器。

我个人使用jQuery form plugin来处理表单提交,我建议你试试看。它有许多很棒的开箱功能。

$.ajax({ 
    url: "form.php", 
    type: "POST", 
    data: string, 
    dataType: json, 
     success: function (result) { 
      if (result.status === "Success") { 
       alert("success");      
      } elseif (result.status === 'Fail'){ 
       for (field in result.data) { 
         /* Invalid field handling */ 
         ... 
       } 
      } 
     } 
}); 

提示:稍微偏离主题,但在JavaScript中使用比较时,总是使用三联等于(===),双等号(= =)是不是在JavaScript作为其他语言一样; JavaScript确实用double equals类型强制执行,这会导致不一致的结果。

+0

很酷,谢谢!我相信我终于明白了这是如何工作的。但是,我仍然遇到一个PHP错误:“解析错误:语法错误,意外的T_DOUBLE_ARROW” - 我也尝试过使用':'而不是'=>'而没有任何运气。 $ invalidFieldArray看起来像这样:'Array([name] =>请输入一个名字。[email] =>您需要输入一个电子邮件地址[message] =>请输入一条信息。正在发生还是现在太复杂了? – Sven 2013-02-16 00:59:40

+0

不知道那里发生了什么,现在它工作:) – Sven 2013-02-16 10:46:19

0

可能发送来自PHP的数据并将其存储在URL中,像这样url.com/#value=1

1

我认为你应该只有一个PHP服务。您从表单发送数据,如果有任何无效数据,您可能想要返回一个JSON指示哪些字段错误,以便您可以解析并显示它。如果一切顺利,您只需简单地显示该成功消息。

虽然我不确定是否有问题。

+0

这是两个建议中最好的。返回带有字段的JSON,以及您希望显示的每个字段的错误消息。 – crush 2013-02-15 20:34:07