使用die()在PHP中返回ajax值

时间:2013-11-03 19:39:36

标签: php jquery ajax

有没有理由不使用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; - )

3 个答案:

答案 0 :(得分:2)

由于die()没有发送任何HTTP错误状态,因此使用它来返回ajax调用的字符串没有问题,但是为了代码的可读性,还有什么可以说的,我不认为这是一个好主意,但除此之外,对于功能,它没有问题,因为它输出消息。 而且,现在已经说过,你必须考虑像CLI PHP这样的情况,其中返回的整数对于shell来说真的意味着什么(仅仅是为了提及)。

答案 1 :(得分:1)

我会说不,你不想这样做。不会将某些内容返回给ajax调用,它等同于exit(),您可以给它一个状态。

这只是意见,但与语义有关:它并不意味着被用作echo,所以不要将其用作一个。

事实上,你可以让它'返回'一个整数(如同,有效),但是如果你输入255就不会因为它被保留而使它变得棘手且难以理解。

当然,虽然语法上它适用于像'0'这样的值,但它会认为使用语言结构返回任意消息是不好的形式,因为它不能返回所有消息。

答案 2 :(得分: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;
  }