gpt4 book ai didi

javascript - 状态 200 OK,相同域,有效 JSON 数据且无响应(Ajax)

转载 作者:行者123 更新时间:2023-11-28 11:02:28 26 4
gpt4 key购买 nike

这是我的 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),下面是一个使用 debug 的示例:

{"1778":"Bras\u00edlia"}

{"1778":"Bras\u00edlia"} 会显示为 e.responseText(错误),即使状态正常,并且 URL 位于同一域(不需要 JSONP) 。我不知道为什么我无法取得成功

编辑:我已经设置了 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 

最佳答案

我认为问题出在对象属性上{“1778”:“胸罩\u00edlia”}表示属性名称无效的对象,因此 json 解码失败;为了证明这是否正确,尝试一下

  1. 使用纯文本作为 dataType 并记录它,它应该可以工作[但当然你无法将其转换为 json]
  2. 更改LoadFromDB 方法以使属性名称有效[以字母、_ 或 $ 开头],您将获得有效的 JSON 响应,但您需要更改使用方式

1778是一个ID,正确的结构应该是{id:"1778",property:"Bras\u00edlia"} 并且工作完美尝试一下并告诉我们

编辑:如jcaron好心建议,我必须修复这个答案:“1778”确实是一个有效的属性名称,但如果使用点表示法,则标识符无效。因为我不知道 jQuery 如何管理这个,所以我建议按照上面的方法进行测试,看看其中一项测试是否给出结果。

关于javascript - 状态 200 OK,相同域,有效 JSON 数据且无响应(Ajax),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34162425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com