在服务器端使用php对jquery ajax调用做出响应

时间:2011-07-05 06:17:18

标签: php ajax jquery

我试图用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

感谢您的帮助! =)

2 个答案:

答案 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:如果您的服务器中有日志,则可以在那里找到错误。