有什么理由不使用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');
?>
附言。我知道mysql_*()
函数已被弃用,无需评论。我只是喜欢使用它们并且会。尽可能
编辑:
我想知道为什么没有人注意到checkLogin()
函数没有意义,因为请求是异步的,并且函数总是返回undefined
;-)
由于die()
不发送任何HTTP
错误状态,因此使用它返回 ajax 调用的字符串没有问题,但留在那里要说的是,对于代码的可读性,我认为这不是一个好主意,但除此之外,对于功能,它没有问题,因为它输出消息。但是,现在说了,您必须考虑像CLI PHP
这样的情况,其中返回的整数确实对 shell 有意义(只是为了提及)。
我会
说不,你不想这样做。它不是为了向ajax调用返回某些东西,它等同于exit()
,你可以给它一个状态。
虽然这只是意见,但确实与语义有关:它并不意味着用作一种echo
,所以不要将其用作一种。
事实上,你可以让它"返回"一个整数(如,这有效),但如果你输入 255,它不会,因为它是保留的,这使得它变得棘手和不可读。
所以可以肯定的是,虽然它在语法上适用于像 '0'
这样的值,但它会认为使用语言结构返回任意消息是不好的形式,因为它不能返回所有消息。
是的,有一个问题。在你太简单的情况下没有,但想象一下:
die($Result);
这将如何表现?你不知道这会做什么,因为你不知道$Code的类型。正如汉克指出的那样,如果它是一个整数,它不会打印任何东西。因此,您有一行代码,其行为会有所不同,具体取决于$Result
。它似乎很容易患上海森虫。
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;
}