Ajax没有返回数据

时间:2014-03-10 20:08:10

标签: javascript php jquery mysql ajax

嘿,我想在这种情况下以某个字母开头回复书籍H.但我不能让这个代码在任何帮助下工作都会非常充实。 HTML

<a href="" id="searchH" name="h" value="h"> <<<< CLICKED

<div id="ack2"></div> <<<<<< DISPLAYED HERE

PHP

<?php
include('db.php');
$letter = "";
$i = 0;
$jsonData = '{"books":[';
if(isset($_POST['letter'])){
    $letter = $_POST['letter'];

    $sqlString = "SELECT * FROM book WHERE title LIKE '$letter%'";

    $query = mysql_query($sqlString) or die (mysql_error()); 
    while ($row = mysql_fetch_array($query)) {
        $i++;   
        $year = $row["year"];   
        $title = $row["title"];
        $author = $row["author"]; 
        $jsonData .= '{ "title":"'.$title.'", "author":"'.$author.'", "year":"'.$year.'" },';
    }

    $jsonData =  chop($jsonData, ",");
    $jsonData .= ']}';
    echo $jsonData;
}
?>

的Ajax / JavaScript的

$("#searchH").click(function(){
    letter = $("#searchH").val();
    $.ajax({
        type: "POST",
        url: "azlistscript.php",
        data: "letter ="+letter,
        success: function(html){
            $("#ack2").html(html);
            }
            });
    });

如果我手动更改字母值,PHP文件会返回书籍数据,它会显示以H开头的书籍,只需要在html页面的div标签中显示。

click事件的值在控制台中不记录任何值

6 个答案:

答案 0 :(得分:3)

我能看到的一个问题是

letter = $("#searchH").val();

元素是'a'标签,它不是表单元素,所以.val()在这里不起作用。而不是尝试

letter = $("#searchH").attr('value');

答案 1 :(得分:0)

像这样生成你的php输出 json_encode(array("title"=>$title,"author"=>$author,"year"=>$year));

并在你的js中使用 output = $.parseJSON(html)解析输出,然后使用

显示它

$("#ack2").html('<span>'+output.title+'</span>'+'<span>'+output.author+'</span>'+'<span>'+output.year+'</span>');

答案 2 :(得分:0)

success: function(html)
{
});

html只是您为返回的对象提供的名称。该对象包含一些变量,包括消息d。

你必须抓取它:

success: function(html)
{
    var message = html.d;
    // use message
});

我不知道为什么会这样,但这就是饼干粉碎的方式。

如果它没有完成这项工作,那么您提供的数据或后端处理内容的方式有问题,只需使用开发人员工具并查看内容是什么`发生在网络中。如果您空白,则可以随时记录正在进行的操作。

编辑:可能d部分只是ASP提供的[WebMethod]返回方法的一部分。 See discussion。更多话题:

  • 确保您已检查过您要发送的值。
  • 确保您已检查过您正在接收的价值。
  • 确保您已检查过请求响应提供的http网络状态(实际上是200吗?)。

如果某些事情很奇怪,那么你就会对正在发生的事情进行更多的探讨。

答案 3 :(得分:0)

在您的javascript中检查您的数据,请尝试:

 //JavasCript code
 $("#searchH").click(function(){
   $.ajax({
      type: "POST",
      url: "azlistscript.php",
      data: { letter:  $("#searchH").val()},
      success: function(html){
          $("#ack2").html(html);
          }
        });
  });

在PHP中检查你的POST阵列:

 <?php
 // PHP code
  if(isset($_POST['letter'])){
    // your more code...
  }else { //debug POST array
      echo '<pre>'. print_r($_POST['letter'], true) . '</pre>'
  }

答案 4 :(得分:0)

你需要解决一些问题:

$("#searchH").click(function (e) {
    e.preventDefault(); //prevent browser link behaviour
    var letter = $(this).attr("value"); //get the attribute (ex: value, name, etc.)
               //^^^^^^^this refers to the current element being clicked
    $.ajax({
        type: "POST",
        url: "azlistscript.php",
        data: "letter =" + letter,
        success: function (html) {
            $("#ack2").html(html);
        }
    });
});

答案 5 :(得分:0)

你有一个良好的开端,但你错过了几件事:

  1. 不要信任来自不受信任来源的输入数据。将来自$ _REQUEST,$ _GET,$ _POST的数据视为来自恶意黑客。这就是你应该过滤数据的原因。您的代码目前对其他人提到的SQL注入攻击开放。如果您使用输入数据进行SQL插入,那么您也可以使用XSS。

  2. 请务必仔细检查您的HTML以检查您是否正确编写,了解标签的使用及其属性。这意味着它遵守W3C标准。您可以通过http://validator.w3.org运行HTML。您将要阅读http://www.w3.org/TR/html5/中的文档。只需更换您感兴趣的标记就可以更轻松地访问Google w3c html5 a tag。锚标记上不存在value属性。如果要为其附加值,请使用HTML5数据属性。看看我改变的代码。

  3. 确保您了解jQuery API和参数:http://api.jquery.comhttp://learn.jquery.com。例如,success函数的第一个参数根据从服务器返回的数据类型(xml,json,html)而变化。它可能是一个字符串或者它可能是一个真正的javascript对象,这就是为什么你的JSON没有出现在div中的一个原因。

  4. 在您的AJAX data选项中,您在密钥名称(即字母)后面添加了一个额外的空格。这意味着它将如何在您的PHP中结束,因此您的if语句将失败。这样的小错字很小心。他们确实有所作为。

  5. {* 1}}函数现在已在PHP 5.5中弃用,这意味着您的代码最终将无法在PHP的未来版本中使用。请记住这一点并使用mysql_*函数或更好地使用mysqli_*类并编写面向代码对象的样式。

  6. 与其他人一样,提到使用mysqli。为什么?您不必担心将JSON语法设置为正确,尤其是当您想要更改JSON响应的外观时。使用json_encode,您需要做的就是给它一个数组。如果更改数组的形状,JSON将始终以您希望的方式出现。太容易了。

  7. 这是实时代码:

    Javascript和HTML:http://jsbin.com/nutaquzu/2/edit

    PHP:http://codepad.viper-7.com/zak79I

    欢迎来到网络开发的世界!