0

有什么理由不用die($result)在 PHP 中返回 Ajax 请求结果吗?请注意,这是关于代码语义的理论问题。

简单的例子(当然函数可能很复杂并且返回不同的值)。

JS:

<script>
   function checkLogin(login){
      $.post('/ajax/check',{'login':login},function(res){
          if(res == 1) return 1; else return 0;
      }
   }
</script>

PHP:

<?php
   $db = mysql_connect(...);
   $login = mysql_real_escape_string(stripslashes($_POST['login']));
   $res = mysql_query("SELECT * FROM project.users WHERE login = '$login'");
   if(mysql_num_rows($res)) die('0'); else die('1');
?>

PS。我知道mysql_*()功能已被弃用,无需对此发表评论。我只是喜欢使用它们并且愿意。尽可能。

编辑:

我想知道为什么没有人注意到checkLogin()函数没有意义,因为请求是异步的,并且函数总是返回undefined;-)

4

3 回答 3

2

由于die()不发送任何HTTP错误状态,使用它返回一个字符串进行ajax调用是没有问题的,但是留在那里说的是,为了代码的可读性,我认为这不是一个好主意,但其他除此之外,就功能而言,它没有问题,因为它会输出消息。而且,既然有人这么说,你必须考虑CLI PHP返回的整数对 shell 真正意味着什么的情况(只是为了提一下)。

于 2013-11-03T19:49:43.457 回答
2

我会说不,你不想这样做。它不是为了向 ajax 调用返回一些东西,它相当于exit(),你可以给它一个状态。

这只是意见,但确实与语义有关:它并不打算用作一种echo,所以不要将它用作一个。

事实上,你可以让它“返回”一个整数(就像这样,这是可行的),但如果你输入 255 它就不会,因为它是保留的,这使它变得棘手和不可读。

所以可以肯定的是,虽然它在语法上适用于类似的值'0',但它会认为使用语言结构返回任意消息是不好的形式,因为它不能返回所有消息。

于 2013-11-03T19:55:28.067 回答
1

是的,有问题。在你太简单的情况下没有,但想象一下:

die($Result);

这将如何表现?你不知道那会做什么,因为你不知道 $Code 的类型。正如hank所指出的,如果它是一个整数,它不会打印任何东西。所以你有一行代码会根据$Result. 它似乎很容易出现heisenbugs

PHP 文档:

    Note: PHP >= 4.2.0 does NOT print the status if it is an integer.

更好的解决方案是改进对流量的控制:

if ($this_is_NOT_an_ajax_call) {
  // Do what you need to do
  }
else {
  echo $Result;
  }
于 2013-11-03T19:55:54.837 回答