状态200 OK,相同的域,有效的JSON数据,没有响应(Ajax)
Status 200 OK, same domain, valid JSON data and no response (Ajax)
这是我的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(错误),即使状态为OK,并且URL在同一域上(不需要JSONP)。我不知道为什么我达不到success
。
编辑:我已经设置了内容类型:
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
我认为问题出在对象属性上{"1778":"Bras''u00edlia"}表示属性名称无效的对象,因此json解码失败;要证明这是否正确,请尝试
- 使用纯文本作为dataType并记录它,它应该可以工作[但当然你无法将其转换为json]
- 更改LoadFromDB方法,使属性名称有效[以字母、_或$]开头,则会有一个有效的JSON响应,但您需要更改使用它的方式
如果1778是一个ID,正确的结构应该是{id:"1778",属性:"Bras''u00edlia"},工作完美无瑕试试看,让我们知道
编辑:正如jcaron善意地建议的那样,我必须修复这个答案:"1778"确实是一个有效的属性名称,但如果使用点表示法,则是无效的标识符。由于我不知道jQuery是如何管理这一点的,我建议如上所述进行测试,看看其中一个测试是否给出了结果。
相关文章:
- 如何从php返回php变量值以及html响应ajax
- PHP:响应 AJAX 发布请求
- 从 php 响应 AJAX 的更好方法
- 如何将响应 ajax 发送到 html
- 处理服务器响应AJAX
- Twitter Bootstrap Rails按钮下拉列表没有响应AJAX
- 状态200 OK,相同的域,有效的JSON数据,没有响应(Ajax)
- 多个JSON数组作为响应-AJAX&PHP
- 稍后再响应AJAX请求
- Jquery的JSON响应.ajax四舍五入较大的数字,所以我不能得到正确的值
- 如何响应AJAX调用没有erb.js /为什么使用erb.js
- 是否有可能得到php echo/响应Ajax而不通过Ajax张贴
- 如何发送响应ajax到变量javascript
- Servlet不响应ajax请求
- 为什么嵌入的JavaScript在响应ajax调用时不执行?
- 多响应AJAX请求
- JAVASCRIPT:在本地主机上成功响应Ajax后重定向到主页
- Spring响应ajax: 403错误
- JSON响应AJAX格式错误
- 我如何发送压缩(gzip) JSON作为响应Ajax请求,从Java