데이터와 함께 일부 작업을 수행 한 PHP 파일이 있는데 json
형식 (추정 됨)으로 데이터를 보냅니다.Json_encode가 객체 대신 문자열을 반환합니다.
그런 다음 jax 파일을 사용하여 ajax를 사용하여 데이터를 수신합니다. 그것은 크로스 도메인 작업입니다, 그렇다면 jsonp를 사용해야합니다.
문제는 내가 내가 JSONP에서 데이터 유형을 변경할 때 내가 (간단한 문자열을 JSON 객체로하지만, 같은 데이터를받을 수없는 때문이라고 생각하는 오류
Object {readyState: 4, status: 200, statusText: "success"} parsererror - Error: jQuery1123030211047915085665_1465277732410 was not called(…)
를 받고있어 것입니다 텍스트는 .done
블록으로 이동).
간단한 문자열이 아닌 json 개체로 데이터를 수신하려면 어떻게해야합니까?
코드 :
PHP :
if ($moeda ==='SEK'){
foreach($result as $r){ //$result is an array with the result of a sql query
//here I do some verifications, that depending on the circunstance, calculate and replace
//the value of the $r['price'] field.
if($r['currency'] === "SEK"){
$valor = $r['tprice'];
$r['tprice'] = number_format($valor,2,'.','');
}else if ($r['currency'] === "BRL"){
$dat = $r['emissao'];
$valor = $r['tprice'];
$r['tprice'] = number_format((converteBRL_SEK($dat,$valor)) ,2,'.','');
}else if ($r['currency'] === "USD"){
$dat = $r['emissao'];
$valor = $r['tprice'];
$r['tprice'] = number_format((converteUSD_SEK($dat,$valor)),2,'.','');
}else if ($r['currency'] === "EUR"){
$dat = $r['emissao'];
$valor = $r['tprice'];
$r['tprice'] = number_format((converteEUR_SEK($dat,$valor)),2,'.','');
}
else{
echo 'error';
}
$retorno['dados'] = $r;
// using the GET callback because I'm using jsonp.
echo $_GET['callback'] . '('.json_encode($retorno,JSON_PRETTY_PRINT).')';
}
이 편집 : 나는 자바 스크립트 코드를 게시하는 것을 잊었다 , 여기 간다 :
코드 :
function buildTableDetail(p_sts,p_ar){
$('#tb_detail').empty();
return $.ajax({
type:'GET',
crossDomain:true,
url:'http://localhost/files/montar_detail_local.php?callback=?',// I use a real url, localhost just for the example
dataType:'jsonp',
data: {area:p_ar,
st:p_sts},
beforeSend: function(){
$('#t_detail').css('opacity','1.0');
console.log(p_ar);
console.log(p_sts);
}
}).done(function(data){
//after I get the data, I build a table, and format some values here...
$('#tb_detail').empty();
console.log("AREA:"+p_ar);
for (i = 0; i < data.dados.length; i++) {
$('#tb_detail').append('<tr> <td>'+data.dados[i].proposal+
'</td><td class="h_detail old_no" >'+data.dados[i].old_no+
'</td><td class="h_detail emissao" style="white-space: nowrap;">'+data.dados[i].emissao+
'</td><td class="h_detail area">'+data.dados[i].area+
'</td><td class="h_detail country">'+data.dados[i].country+
'</td><td class="h_detail ec_name">'+data.dados[i].ec_name+
'</td><td class="h_detail distributo">'+data.dados[i].distributo+
'</td><td class="h_detail project">'+data.dados[i].project+
'</td><td>'+float2moeda(data.dados[i].tprice)+
'</td><td class="h_detail gm">'+data.dados[i].gm+
'</td><td >'+data.dados[i].prob+
'</td><td class="h_detail st">'+(data.dados[i].st).substr(0,1)+'</td></tr>');
console.log(data.dados[i].proposal);
console.log(data.dados[i].distributo);
}
})
.fail(function(data, textStatus, errorThrown){
alert("Erro na operação.");
console.log(data);
console.log(textStatus);
console.log(errorThrown);
})
}
EDIT2을 이
echo $_GET['callback'] . '('.json_encode($retorno,JSON_PRETTY_PRINT).');';
에
echo $_GET['callback'] . '('.json_encode($retorno,JSON_PRETTY_PRINT).')';
및 오류가 더 이상 표시되지 :
은 그냥이 줄을 업데이트했습니다. 그러나 루프는 for
루프에 들어 있지 않으며 데이터가 표시되지 않습니다. console.log(data.dados.lenght)
을 사용하고 나에게 'undefined'를 반환하므로 루프 할 수 없습니다.
아이디어가 있으십니까?
당신은뿐만 아니라 자바 스크립트를 게시해야합니다. – jeroen
죄송합니다. 방금 질문을 업데이트했습니다. – Lioo