我正在用php开发数据库搜索应用程序,并在一个页面上通过Jquery Ajax(JSON)根据某个参数在数据库中搜索寄存器,向服务器端脚本发出请求。搜索成功后,我回显一个关联数组,其中包含所有编码为JSON的条目。索引数组产生格式不正确的JSON
有了Chrome的元件检查器中,可以阅读响应,该响应是这样的:
[0: False
1: "{"id":"5","nome":"Maria","sobrenome":"Joaquina","sexo":"F","rua":"","complemento":"","numero":"0","bairro":"Aeroporto\r\n","telefone":"","email":"","nacionalidade":"Peruano"}"]
元素索引1似乎是良好形成JSON,但我不能从中读取,任何东西,例如数据[1] .nome返回undefined。
我想知道我的json发生了什么,我该如何解决这个问题,以便我可以通过它们的属性访问这些对象。以下是处理JSON的代码。
使用Javascript:
$(document).ready(function(){
$('#btnEnviarBairro').click(function(){
var data = $("#bairros_juizdefora").val();
$.ajax({
type: "POST",
url: "processaBuscaId.php",
dataType: 'json',
data: {id : data, type: 1},
success: function(response){
var table = $('<table/>');
for (var i = 1; i < response.length; i++){
table.append("<tr><td>"+response[i].nome+"</tr></td>");
}
$('#receptorBairro').append(table);
},
error: function(xhr, status, error){
console.log(xhr+" "+status+" "+error);
}
}).done(function(){
});
});});
控制器文件的种类:
function buscaBairro($id, $connection) {
$dao = new estrangeiroDao ($connection);
return $dao->selectbyBairroId ($id);
};
echo json_encode (buscaBairro($selectId, $connection));
DAO用于搜索:
function selectbyBairroId($id) {
$sql = 'select * from dados_estrangeiro, nacionalidade, bairros_juizdefora where bairroid = '.$id.' and idnac=idnacionalidade and idbairros_juizdefora = '.$id;
$arres = array();
$result = $this->con->query ($sql);
while ($obj = $result->fetch_object()) {
$estrangeiro = $this->objectToEstrangeiro ($obj);
array_push ($arres, json_encode($estrangeiro->returnAsAssoc()));
}
return $arres;
}
}
ObjectToEstrangeiro方法(上文所用):
function objectToEstrangeiro($obj) {
$est = new estrangeiros ($obj->idestrangeiro, $obj->pnome, $obj->snome, $obj->sexo, $obj->rua, $obj->complemento, $obj->numero, utf8_encode ($obj->nomebairros_juizdefora), $obj->telefone, $obj->email, utf8_encode ($obj->nomenacionalidade));
return $est;
}
“豆”(我知道这是java的东西,但我learnd和tryed在PHP来实现)为Estrangeiro表:
class estrangeiros {
[...]
[... Attributes and Getters and Setters (I dont know if they are usfull in PHP...]
[...]
public function returnAsAssoc(){
$arres= array("id"=>$this->getId(), "nome" => $this->getNome(), "sobrenome"=>$this->getSobrenome(), "sexo"=>$this->getSexo(),
"rua"=>$this->getRua(), "complemento"=>$this->getComplemento(), "numero"=>$this->getNumero(), "bairro"=>$this->getBairro(),
"telefone" =>$this->getTelefone(), "email"=> $this->getEmail(), "nacionalidade"=>$this->getNacionalidade()
);
return $arres;
}
}
编辑:
由于从评论,我可以看到响应格式不正确的JSON,但现在我试图找出原因。
这里有一些事情我发现:
我通过编码关联数组控制器,在那里它再次JSON编码和呼应JSON的阵列。 如果删除了任何json编码,我在Jquery中得不到回复。
此外,我不能编码的对象数组,右(至少不具有私有属性)?所以我必须将我要获取的对象转换为关联数组,然后将它们存储在另一个数组中,以便可以访问它们的值。
使用'jsonlint.org'你的JSON看起来是'Badly Formed'但是如果你从前面删除'[0:False1:'''''从结尾它确实有效 – RiggsFolly
任何提示为什么?它似乎在索引之后形成良好。如果格式错误,它是如何发送的? –