将数据从PHP发送到jQuery
我使用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");
}
}
});
您的表单提交有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类型强制执行,这会导致不一致的结果。
您可能发送来自PHP的数据并将其存储在URL中,像这样url.com/#value=1
我认为你应该只有一个PHP服务。您从表单发送数据,如果有任何无效数据,您可能想要返回一个JSON指示哪些字段错误,以便您可以解析并显示它。如果一切顺利,您只需简单地显示该成功消息。
虽然我不确定是否有问题。
这是两个建议中最好的。返回带有字段的JSON,以及您希望显示的每个字段的错误消息。 – crush 2013-02-15 20:34:07
你需要从PHP回显更多东西,告诉你什么失败了,然后用JS处理这个响应,以显示任何适合的消息。发布一些代码并告诉我们你现在是如何设置的,并且它会更容易帮助。 – adeneo 2013-02-15 20:24:46
如果你有jQuery验证并启用了JS,那么你的PHP验证可能永远不会发挥作用(它只是为了预防措施)。换句话说,如果您的客户端验证正在工作,那么您的服务器端验证将不会有任何消息发回。如果您的客户端验证被禁用或绕过,那么您的服务器端验证将接管。如果客户端的JS被禁用,那么无论如何你都不能通过jQuery发回任何消息。也显示代码。 – Sparky 2013-02-15 20:28:39
他应该仍然返回一个JSON响应。如果它被绕过,那并不意味着Javascript被禁用。即使它是,它应该返回JSON响应,如果Javascript被禁用,它将在浏览器中显示为文本。 – crush 2013-02-15 20:36:36