我有一系列嵌套的AJAX调用,用于验证正在提交的表单的每个元素。每个都检查由被调用的PHP文件创建的data
变量的结果。如果PHP例程不成功,则例程echoes
将由AJAX例程捕获一条错误消息,该消息又显示在警告框中供用户查看,以便可以根据需要更正表单然后重新提交。如果PHP例程成功,则调用echo
0和下一个AJAX验证脚本。只有在所有表单元素成功验证后,才会处理表单。
我的问题与我们亲爱的朋友!=
运算符和!==
运算符有关,但是考虑了运算效率(我理解它们运行方式的不同)。目前,例程的结构如下:
在JQuery / AJAX中:
$.get('data_check.php', { id: $('#id').val() }, function(data) {
if (data != 0) {
alert(data);
} else {
[...next AJAX call...]
在data_check.php的末尾(以及由父AJAX例程调用的所有此类PHP例程):
if (!$success) {
echo $error_message;
exit;
} else {
echo 0;
exit;
}
这很有效。但是,我知道PHP文件中的echo
命令会产生一个由AJAX例程接收的字符串值,因此当收到的data
变量被评估时,会发生类型强制。 data != 0
。
我可以用以下方式修改当前的例行程序:
(1)回显'0'
而不是0
(在PHP中,这将消除PHP(???)的类型转换,但仍将依赖于AJAX中的类型强制) ,或者:
(2)使用data !== '0'
评估数据(在AJAX中,这将消除类型强制,但仍然依赖于PHP(???)的类型转换),或者:
(3)做上述两种情况(最应该消除类型强制)。
但是这些方法中哪些 - 如果有的话 - 效率最高?我可能会在这里分裂,但我更倾向于采用一种技术,该技术采用解释器处理步骤最少的数量,并且可能有一种更有效的方式来返回成功价值而不是我的方式。设置它,或者我列出的3种可能的替换中的任何一种。请让我知道编写此代码的不同方法(包括我未列出的方法)是最有效的处理方式。非常感谢!
答案 0 :(得分:3)
我觉得你在这里混淆了。完全没有PHP的强制,它的工作就是输出一个0.它没有办法告诉接收的JavaScript它是0还是0' 0'除非您使用JSON - 其处理将明显否定您尝试进行的任何重新优化。
因此,JS将始终收到一个字符串。知道这一点,使用适当的比较来避免客户端的强制!== '0'
话虽如此,这是过早优化的典型例子。如果您要执行一百万次操作,则可能能够记录一分钟的性能提升。另一方面,如果您要发送一百万个AJAX请求,那么这可能是您需要担心的最后一件事。
答案 1 :(得分:0)
**php**
$responseMessage = array('success' => true, 'message' => 'Your validation error/errors');
header('Content-Type: application/json');
echo json_encode($responseMessage);
exit();
**javascript**
$.get('URI', function(data)
{
if (data.success != undefined)
{
if (data.success)
{
//show successful message
}
else
{
$(form).find('#form-error-container').append(data.message);
//handle the validation errors
}
}
else
{
//handle via ajaxError/.fail or here :(
}
});
要添加更多参数,只需展开数组;
$responseMessage = array('success'=>true, 'errors'=>array('username'=>'Too many characters'));
**js**
data.errors.forEach( //your logic );