【发布时间】:2016-03-13 18:12:55
【问题描述】:
这是我的 ajax 调用:
$.ajax({
url : hostGlobal + "site/modulos/prefeitura/acoes-jquery.php",
type: "POST",
dataType : "JSON",
data: {
acao: "filtrarCidades",
estado_id: $(".estados:chosen").val()
},
success: function(json) {
console.log("worked");
$(".cidades").html('');
var options = "<option value=\"\"></option>";
$.each(json, function(key, value) {
options += '<option value="' + key + '">' + value + '</option>';
});
$(".cidades").html(options);
if (!filterThroughCEP) {
$(".cidades").trigger("chosen:updated");
}
},
error: function(e) {
console.log(e.responseText);
}
});
这是 php 操作:
if ($acao == 'filtrarCidades') {
$estado_id = $_POST['estado_id'];
$cidade->where = "estado_id = '".$_POST['estado_id']."'";
$cidade->LoadFromDB();
for ($c=0; $c<count($cidade->itens); $c++) {
$cidades[$cidade->itens[$c]->id] = $cidade->itens[$c]->nome;
}
echo json_encode($cidades);
die();
}
json_encode($cidades) 是有效的 json 数据 (UTF8),这是一个使用调试的示例:
{"1778":"Bras\u00edlia"}
这个{"1778":"Bras\u00edlia"} 会显示为 e.responseText(错误),即使状态正常,并且 URL 位于同一域中(不需要 JSONP)。我不知道为什么我无法联系到success。
编辑:我已经设置了 contentType:
contentType: "application/json",
而且调用仍然无法“达到”成功。这是第三个错误参数:
SyntaxError: Unexpected token
at parse (native)
at ajaxConvert (http://localhost/sisconbr-sistema-novo/site/visual/js/jquery.js:7608:19)
at done (http://localhost/sisconbr-sistema-novo/site/visual/js/jquery.js:7363:15)
at XMLHttpRequest.<anonymous> (http://localhost/sisconbr-sistema-novo/site/visual/js/jquery.js:7835:9)
确实与来自数据库的字符串中的 unicode 字符有关。
EDIT2:我又写了一遍,现在更清楚了:
function getCitiesByState() {
$.ajax({
url : hostGlobal + "site/estrutura/ajax.php",
type: "POST",
dataType : "text",
data: {
action: "getCitiesByState",
state_id: $(".estados option:selected").val()
},
success: function(json, textStatus, jqXHR) {
console.log($.parseJSON(json));
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(errorThrown);
}
});
}
PHP:
if ($_POST["action"] == "getCitiesByState") {
$cities = getResults("SELECT * FROM tbl_cidades WHERE estado_id = ".$_POST["state_id"]);
echo json_encode($cities, JSON_UNESCAPED_UNICODE);
die();
}
输出:
[{"id":"1778","estado_id":"7","nome":"Brasília","cep":"","loc_no_abrev":"Brasília"}]
错误:
Uncaught SyntaxError: Unexpected token
【问题讨论】:
-
e的其余属性是什么? -
毫无疑问,您很容易受到sql injection attacks 的攻击,不要再假设成功了。 jquery 有一个用于 ajax 请求的
error参数 - 如果未达到成功,则检查错误。 -
您正在使用的错误处理程序具有三个参数。为我们记录第三个。
-
设置标头,使其可以正确转换为 JSON 对象,即响应标头。 header('Content-Type: application/json');
-
尝试摆脱'die()'
标签: javascript php jquery json ajax