繁体   English   中英

从AJAX调用成功返回'0'或0?

[英]Return '0' or 0 on success from AJAX call?

我有一系列嵌套的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 != 0计算接收到的data变量时,会发生类型强制。

我可以修改当前的例程:

(1)回显'0'而不是0 (在PHP中,这将消除PHP(???)的类型转换,但仍将依赖于AJAX中的类型强制),或者:

(2)使用data !== '0'评估data !== '0' (在AJAX中,这将消除类型强制,但仍然依赖于PHP(???)的类型转换),或者:

(3)做上述两种情况(最应该绝对消除类型强制)。

但是这些方法中哪些 - 如果有的话 - 是最有效的? 我可能会在这里拆分,但我更倾向于使用一种技术,它采用解释器处理步骤最少的数量,并且可能有一种更有效的方式来返回成功值而不是我设置它的方式,或者我列出的3种可能的替代品中的任何一种。 请让我知道编写此代码的不同方法(包括我未列出的方法)是最有效的处理方式。 非常感谢!

我想你在这里混淆了。 完全没有PHP的强制,它的工作就是简单地输出0.除非你使用JSON,否则它无法告诉接收JavaScript它是0或'0' - 处理清楚否定你想要做的任何重铸优化。

所以,JS总会收到一个字符串。 知道这一点,使用适当的比较来避免客户端的强制!== '0'

话虽如此,这是过早优化的典型例子。 如果您要执行一百万次操作,您可能能够记录一分钟的性能提升。 另一方面,如果你要发送一百万个AJAX请求,这样的收益可能是你需要担心的最后一件事。

 **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 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM