嘿,我想在这种情况下以某个字母开头回复书籍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事件的值在控制台中不记录任何值
答案 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。更多话题:
如果某些事情很奇怪,那么你就会对正在发生的事情进行更多的探讨。
答案 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)
你有一个良好的开端,但你错过了几件事:
不要信任来自不受信任来源的输入数据。将来自$ _REQUEST,$ _GET,$ _POST的数据视为来自恶意黑客。这就是你应该过滤数据的原因。您的代码目前对其他人提到的SQL注入攻击开放。如果您使用输入数据进行SQL插入,那么您也可以使用XSS。
请务必仔细检查您的HTML以检查您是否正确编写,了解标签的使用及其属性。这意味着它遵守W3C标准。您可以通过http://validator.w3.org运行HTML。您将要阅读http://www.w3.org/TR/html5/中的文档。只需更换您感兴趣的标记就可以更轻松地访问Google w3c html5 a tag
。锚标记上不存在value
属性。如果要为其附加值,请使用HTML5数据属性。看看我改变的代码。
确保您了解jQuery API和参数:http://api.jquery.com和http://learn.jquery.com。例如,success函数的第一个参数根据从服务器返回的数据类型(xml,json,html)而变化。它可能是一个字符串或者它可能是一个真正的javascript对象,这就是为什么你的JSON没有出现在div中的一个原因。
在您的AJAX data
选项中,您在密钥名称(即字母)后面添加了一个额外的空格。这意味着它将如何在您的PHP中结束,因此您的if
语句将失败。这样的小错字很小心。他们确实有所作为。
{* 1}}函数现在已在PHP 5.5中弃用,这意味着您的代码最终将无法在PHP的未来版本中使用。请记住这一点并使用mysql_*
函数或更好地使用mysqli_*
类并编写面向代码对象的样式。
与其他人一样,提到使用mysqli
。为什么?您不必担心将JSON语法设置为正确,尤其是当您想要更改JSON响应的外观时。使用json_encode
,您需要做的就是给它一个数组。如果更改数组的形状,JSON将始终以您希望的方式出现。太容易了。
这是实时代码:
Javascript和HTML:http://jsbin.com/nutaquzu/2/edit
PHP:http://codepad.viper-7.com/zak79I
欢迎来到网络开发的世界!