返回' 0'从AJAX调用成功还是0?

时间:2016-01-16 00:02:37

标签: javascript php jquery ajax

我有一系列嵌套的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种可能的替换中的任何一种。请让我知道编写此代码的不同方法(包括我未列出的方法)是最有效的处理方式。非常感谢!

2 个答案:

答案 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 );