我试图用jquery和ajax实现经典的用户名可用性检查器。这是我的方法:
jquery,在客户端:
$("#usrnameTBox").keyup(function(){
if ($(this).val().length > 2) {
$.ajax({
type: 'POST',
url: 'ajax/ajaxPerfil.php',
data: { function : "askForUsr", usrname: $(this).val() },
dataType: 'json',
success: function(data) {
alert(data);
if(data.exists) {
$(".usrSt").attr('style', '')
.attr('style', "color:red;")
.html('YA ESTÁ EN USO');
} else {
$(".usrSt").attr('style', '')
.attr('style', "color:green;")
.html('Disponible!!!');
}
},
error: function(XMLHttpRequest, textStatus, errorThrown){
alert("Error!!! =/");
}
});
} else {
$(".usrSt").attr('style', '')
.attr('style', "display:none;")
.html('');
}
});
php,在服务器端:
<?php
require_once("../src/ajax/ajaxPerfilController.php");
?>
ajaxPerfilController.php:
<?php
$srcFolder = "../src/";
$classes = array("mappers/Perfil.php",
"fachadas/PerfilFachada.php"
);
foreach ($classes as $class)
require_once($srcFolder.$class);
function getByAttr($attr, $value) {
if (strcmp($attr,"usrname") == 0) {
$fachada = PerfilFachada::singleton();
return $fachada->exists($value);
}
return NULL;
}
if (isset($_POST["function"])) {
if (strcmp($_POST["function"],"askForUsr") == 0) {
if (isset($_POST["usrname"])) {
if (getByAttr("usrname",$_POST["usrname"])) {
$return["exists"] = True;
echo json_encode($return);
} else {
$return["exists"] = False;
echo json_encode($return);
}
}
}
}
?>
问题是,它一直告诉我服务器错误500!要求路线是好的,因为我已经对请求进行了编码并在控制台上进行了尝试...所以,我不知道还能做什么,我尝试过使用dataType'html','text','json' ajax调用,但得到了相同的结果。我认为这只是一件简单的事情,但我不知道该怎么做......
以防万一,我使用google-chorme
感谢您的帮助! =)
答案 0 :(得分:2)
我已经测试了你的代码,它应该主要工作。 我唯一无法测试的是:
$srcFolder = "../src/";
$classes = array("mappers/Perfil.php",
"fachadas/PerfilFachada.php"
);
foreach ($classes as $class)
require_once($srcFolder.$class);
因为我没有那些文件。我认为这是你问题的根源。
尝试使用此代码,看看它是否有效。
<?php
/*
$srcFolder = "../src/";
$classes = array("mappers/Perfil.php",
"fachadas/PerfilFachada.php"
);
foreach ($classes as $class)
require_once($srcFolder.$class);
*/
function getByAttr($attr, $value) {
if (strcmp($attr,"usrname") == 0) {
// $fachada = PerfilFachada::singleton();
// return $fachada->exists($value);
return true;
}
return NULL;
}
if (isset($_POST["function"])) {
if (strcmp($_POST["function"],"askForUsr") == 0) {
if (isset($_POST["usrname"])) {
if (getByAttr("usrname",$_POST["usrname"])) {
$return["exists"] = True;
echo json_encode($return);
} else {
$return["exists"] = False;
echo json_encode($return);
}
}
}
}
?>
如果确实如此,那么错误肯定是在这两个文件中的一个
答案 1 :(得分:1)
有some reasons因为你可以得到500错误,包括执行/编译时间错误。
我看到的唯一错误是你没有声明你的$return
var(好吧,php不需要声明,但是当你用括号访问时需要一个数组),我会添加{{1在使用它之前。
但是,您应该调试代码以查找错误。根据您的工具,最好的方法是设置断点并开始调试。如果您不能以任何方式执行此操作,我的建议是使用Firebug for Firefox并查看您收到的错误(在Net面板的Response部分中)。
希望这会有所帮助。干杯
PS:如果您的服务器中有日志,则可以在那里找到错误。