【发布时间】:2014-01-09 20:33:06
【问题描述】:
我有一个小问题,基于几个例子,我设法使用 Ajax 将数据从一个文件获取到另一个文件,在我的查询中使用 echo,但现在我想使用 json_ecode();但由于某种原因不起作用,我希望有人能解释我做错了什么,并希望提供一个例子。
这就是我得到的:
文件:query.php
// include your config file or not.. depends on how you do it, I like to always have a config file to connect to a DB or anything else...
if(isset($_GET['valrq'])) {
// Clean the request
// transform the value to an int // maybe to much cleaning....
// Do the SQL Query
// if Value exist in DB
// Get values in array
// lets make it clean array, because we don't want all of the columns in the db just a few
$arr = array (
'location' => $locationdb,
'city' => $citydb,
'state' => $statedb,
);
$result['keys'] = array_map("utf8_encode", $arr);
// lets "print" the array
echo json_encode($result);
} else {
$err='Zip Code is not valid';
}
这将输出如下数组:
{"keys":{"location":"Sn. Barnabas","city":"Oxon hill","state":"MD"}}
诅咒网址是这样的:.com/query.php?valrq=20745
20745 是一个邮政编码,我想你已经知道这是怎么回事了……
到目前为止,一切都“正常”
现在这是我提出第一个帮助请求的地方..
我拥有的数据库是一个转储,它包含邮政编码城市和州的基金,但其中一些值带有重音字母,例如 [ó, é, í, ñ, Ñ...] 其他一些外观就像一个俄语字符...所以起初我认为我可以一个一个地更改为 ASCII 码,但是.. 有超过 60K 的记录所以没有办法,然后对于那个特定的列,我将它从 utf8_general_ci 更改为 utf8_unicode_ci但这只会让事情变得更糟……为什么? ...
如果我在数据库中的值是 á 也就是 á 那么没有问题,一切都会好起来的,但实际值是一个原始符号 o 重音字母为 á 或 æ ...现在它显示类似
{"keys":{"location":"Sn.B*\u00c1l*rnabas","city":"Oxon hill","state":"MD"}}
那么我怎样才能获得我在 SQL 中的实际符号或重音字母...?
现在我的第二个问题...根据我所拥有的,如果我不使用 json_encode 或 print_r 或任何数组,而不是数组,我使用和 echo 显示信息,例如 echo $citydb;回声 $statedb; ...等等然后我得到类似的东西
锡。 BarnabasOxon hillMD
这可以通过 br 的 echo $val.br 修复;作为回报,我得到
Sn. Barnabas
Oxon hill
MD
无论如何,奇怪的是,通过使用这种方法,我确实得到了符号和重音字母没有问题......
所以我的html和“ajax”如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test Ajax Fetch SQL Data</title>
</head>
<body>
<form method="post" action="">
<input type="text" name="zipcode" id="zipcode">
<input type="text" name="city" id="city">
<input type="text" name="state" id="state">
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$('#zipcode').keyup(function () {
var zp = $(this);
if (zp.val().length == 5) {
$.ajax({
url: 'query.php',
cache: false,
type: "GET",
data: "valrq=" + zp.val(),
success: function (data) {
if(data.status) {
$('#city').val(data.keys.city);
}
}
})
}
});
</script>
</body>
</html>
使用该代码我什么都没有...但是如果我将 json_encode 更改为只是回显,那么我确实可以在我需要的地方获得信息...
我所要做的就是替换这一行
if(data.status) {
$('#city').val(data.keys.city);
}
为
$('#city').val(data);
只是这样,我将数据输入到我的输入字段问题是不仅仅是任何数据,而是整个事情
所以你可以看到我有两个问题...... 1.- 数据库中的字符集,如果字符具有 í 或 â 或其中任何一个,则数组在值中返回 null ... 2.- 一旦我有了数组,我就需要这些值,这样我就可以把这些值放在我的输入框中。
我什至尝试了 SET CHARACTER SET utf8 但它没有做任何事情......
感谢您抽出宝贵时间...
编辑 - 添加信息。 对于编码部分 UTF-8
Table 1
col 1 | col 2 | col 3
ó | ó | o
echo $col1;
return ó
echo json_encode($col1);
return \90si\ (more or less) ...
无论如何,不再需要编码部分,原因是,当我使用 Json_encode();我得到的符号和十六进制不是存储在数据库中的实际数据,所以我使用 print_r() 这样我就不必担心编码为 utf-8 或 ISO ... 所以我的预览数组是这样的:
{"keys":{"location":"Sn. Barnabas","city":"Oxon hill","state":"MD"}}
现在是这样的:
Array
(
[location] => Sn. Barnabas
[city] => Oxon Hill
[state] => MD
)
该数组在“query.php”中 现在我想要实现的是获取这些值并将它们用作它们在 form.php 中的输入框的值,html 仍然与上面相同,但对 ajax 进行了微小的更改......
$('#zipcode').keyup(function () {
var zp = j(this);
if (zp.val().length == 5) {
$.ajax({
url: 'query.php',
cache: false,
type: "GET",
data: "valrq" + zp.val(),
success: function (data) {
$('#city').val(data);
}
})
}
});
我得到的就是全部,我的意思是从 query.php 返回的任何东西都是我的“数据”......我需要的是获取每个键的实际值
> $('#location').val(data.location);
> $('#state').val(data.state);
> $('#city').val(data.city);
但不工作...
【问题讨论】:
-
真的很难理解你在问什么,举一个有问题的行的具体例子:数据库中存储了什么,echo 返回什么,json_encode 返回什么?还显示
SHOW VARIABLES LIKE 'character_set%'返回的内容 -
你好@Dr.Molle 我只是在最后添加了一些代码,我希望更简单,我还更改了我的数组的输出,在我使用 json_encode 之前,现在只需 print_r() ...谢谢。
-
我没有看到任何问题,
"Sn. B\u00c1lrnabas"是"Sn. BÁlrnabas"的有效 JSON 编码。当您在 JavaScript 中读取此值时,引擎会自动将转义序列转换为字符,如下所示:jsfiddle.net/DRm99 -
\90si\ ...这真的是 json_encode 返回的吗?
-
我明白了,我很担心整个 utf-8 和 ISO 以及 utf8_encode ......我直接去 .com/query.php?valrq=222 并且我得到了那个\ u00c1l 结果是错误的,问题是我从来没有得到实际 html 文件中的值......无论如何,我不再需要它了,我需要的是获得这些值......和是的@Dr.Molle json_encode() 返回那个 \u00c1l ... 因为我有它 $return['keys'] = $array_map('utf8_encode', $arr);但现在不再需要知道如何获得这些值...谢谢。
标签: php jquery mysql ajax arrays