我有一个html页面会发送json请求从服务器获取数据[虽然php-mysql]。我看到没有收到回复。我尝试通过fiddler调试,可以看到“响应不包含有效的json文本。
我的代码在
下面<!DOCTYPE html>
<html>
<script src="http://code.jquery.com/jquery-latest.js"
type="text/javascript">
</script>
<script type="text/javascript">
function populateFruitVariety() {
$.getJSON('serverside.php',
{fruitName:$('#fruitName').val()},
function(data) {
var select = $('#fruitVariety');
if(select.prop) {
var options = select.attr('options');
} else {
var options = select.attr('options');
}
$('option', select).remove();
$.each(data, function(val, text) {
options[options.length] = new Option(text, val);
});
});
}
$(document).ready(function() {
populateFruitVariety();
$('#fruitName').change(function() {
populateFruitVariety();
});
});
</script>
<form>
Fruit:
<select name="name" id="fruitName">
<option>Apple</option>
<option>Banana</option>
<option>Orange</option>
<option>Pear</option>
</select>
Variety:
<select name="variety" id="fruitVariety">
</select>
</form>
</html>
<?php
header('Content-type: application/json');
$host="localhost";
$username="root";
$password="";
$database="db_common";
$table_fruit_info = "fruit_info";
$tc_fruit_id = "fruit_id";
$tc_fruit_index = 'fruit_index';
$con = mysql_connect("$host", "$username", "$password")
or die(mysql_error());
mysql_select_db("$database") or die(mysql_error());
if(isset($_GET['fruitName'])) {
$fruit_id = $_GET['fruitName'];
$result = mysql_query("SELECT * FROM $table_fruit_info
WHERE $tc_fruit_id='$fruit_id'");
while($rows = mysql_fetch_array($result))
{
$ret_fruitIndex = $rows[$tc_fruit_index];
}
}
echo json_encode($ret_fruitIndex);
?>
感谢您的帮助!
答案 0 :(得分:2)
看起来$ret_fruitIndex
只是一个字符串,它没有适当的JSON代表。在while循环中,每次传递都会覆盖此变量的值,我认为这不是您想要做的。
我认为你真的想要这样:
$ret_fruitIndex[] = $rows[$tc_fruit_index];
作为一方,您的代码非常容易受到SQL注入的影响,您也不应该使用不推荐使用的mysql_*
函数。我建议使用mysqli_*
函数,PDO或更现代和更安全的东西。
关于你的jQuery:我不确定你在这里做什么:
if(select.prop) {
var options = select.attr('options');
} else {
var options = select.attr('options');
}
因为那里的情况没有任何区别。
我也相信你的each()
功能是错误的。传递给回调函数的参数将是数据的索引值和该索引的值。
你的逻辑应该是删除所有选项,而不是根据数据添加新选项,所以我不知道为什么options
变量完全参与了这个回调函数。
答案 1 :(得分:1)
你需要一系列的水果名,所以请替换 $ ret_fruitIndex = $ rows [$ tc_fruit_index];
与 $ ret_fruitIndex [] = $ rows [$ tc_fruit_index];
答案 2 :(得分:0)
修复PHP后,将JS回调更改为:
function(data) {
var select = $('#fruitVariety');
select.empty();
$.each(data, function(val, text) {
select.append($('option', {value: val}).text(text));
});
});
options
不是对DOM中数组的引用,它是一个jQuery对象,因此添加它不会更新DOM。