Ir para conteúdo
Fórum Script Brasil
  • 0

Recuperar valor de JSON com AJAX/JS - num tá rolando :-(


ViaPocket

Pergunta

Meu objetivo é carregar via AJAX dados de uma página ASP (clássico) que estão em fortmato JSON e exibi-los com ajuda de JS.

Dividi o desafio em duas etapas. Primeiro quero fazer funcionar o teste abaixo. Depois, quero substituir a primeira linha por valores vindos de um recodset.

Quando rodo o teste abaixo

1) json_string = '[{"first_name":"Lourdes","last_name":"Silva"},{"first_name":"Maria","last_name":"Pereira"}]';

2) person_list = eval(json_string );

3) document.write(person_list[0].first_name);

4) document.write(person_list[0].last_name);

Funciona na boa (desde que tudo esteja na página cliente). Mas se jogo a linha 1 numa página server e chamo via AJAX aí a coisa complica. Aparece "unified".

Achei que bastaria substituir o valor da variável json_string pelo valor do meu objeto XMLHTTP e estaria tudo certo...mas não está funcionando.

1) json_string = innerHTML = objXMLHTTP.responseText;

2) person_list = eval(json_string );

3) document.write(person_list[0].first_name);

4) document.write(person_list[0].last_name);

Help!!

Editado por ViaPocket
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Opa! Segue o código.

Primeiro um trecho do recordset (página de backend)

[<%
If RecordsetXML.EOF then 
Else
RecordsetXML.Move start 
do until RecordsetXML.eof
%>{"first_name":"<%=(RecordsetXML.Fields.Item("NomeFuncionario").Value)%>", "last_name":"<%=(RecordsetXML.Fields.Item("SobreNomeFuncionario").Value)%>"
<%
'Add Comma To End Of JSON Line If It Isn't The Last Record      
RecordsetXML.movenext
If Not RecordsetXML.eof Then
Response.Write ","
End If
loop
End if
%>]}
Agora a página cliente.
&lt;script>
function carregaDados()
{
    
var objXMLHTTP = createXMLHTTP(); 
objXMLHTTP.open("post", "teste.asp", true); 
objXMLHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
objXMLHTTP.onreadystatechange=function(){

if (objXMLHTTP.readyState==3){
}
else
if (objXMLHTTP.readyState==4){ 

string_json =innerHTML=objXMLHTTP.responseText;


person_list = eval(string_json );


document.write(person_list[0].first_name);
document.write(person_list[0].last_name);


}}
objXMLHTTP.send();
/*---------------------------------------------------------------*/
}
</script>

Tudo que quero é listar registros via AJAX + JSON.

Agradeço desde já!

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta no lugar de:

var objXMLHTTP = createXMLHTTP();
Isso:
var objXMLHTTP = new XMLHttpRequest();

Acho que esse comando só não vai funcionar no IE, não tenho certeza.

E outra coisa que reparei, agora no ASP, não sei nada sobre essa linguagem, posso estar falando besteira, mas o correto não seria antes de você abrir a tag <%, colocar um [{ e ao fecha-la colocar: }]

Editado por vini_loock
Link para o comentário
Compartilhar em outros sites

  • 0

Olá Vini.

Bom, pra fazer um teste ultra básico fiz o seguinte.

Colei a linha abaixo numa página ASP (backend) (sem nenhuma tag HTML ou ASP)

'[{"first_name":"Maria","last_name":"Medina"},{"first_name":"José","last_name":"Carlos"}]'

E chamei isso na página cliente usando o AJAX tradiconal. Abaixo o trecho.

&lt;script>

function carregaDados()

{

var objXMLHTTP = createXMLHTTP(); //( também usei o new XMLHttpRequest com sugeriu, não mudou em nada)

objXMLHTTP.open("post", "teste.asp", true);

objXMLHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

objXMLHTTP.onreadystatechange=function(){

if (objXMLHTTP.readyState==3){

}

else

if (objXMLHTTP.readyState==4){

string_json =innerHTML=objXMLHTTP.responseText;

person_list = eval(string_json);

document.write(person_list[0].first_name);

document.write(person_list[0].last_name);

}}

objXMLHTTP.send();

}

</script>

Aparece undefinedundefined

Mas se '[{"first_name":"Maria","last_name":"Medina"},{"first_name":"José","last_name":"Carlos"}]' estiver na mesma página cliente aí funciona.

valeu

Link para o comentário
Compartilhar em outros sites

  • 0

Tente assim,

if (objXMLHTTP.readyState==4){ 

string_json =innerHTML=objXMLHTTP.responseText;

person_list = null;
try{
eval("person_list = "+string_json+";");
}catch(ee){

}

if(person_list){
document.write(person_list[0].first_name);
document.write(person_list[0].last_name);
}

Sempre faça a execução dentro do EVAL.

Editado por hipnos na area
Link para o comentário
Compartilhar em outros sites

  • 0

Olá pessoal.

Bom, ainda não rolou.

Vamos ver se estou fazendo certo.

Minha página"backend" tem apenas isso:

'[{"first_name":"Andrews","last_name":"Medina"},{"first_name":"José","last_name":"Carlos"}]'

A página "cliente" tem isso:

&lt;script>

function carregaDados()

{

var objXMLHTTP = createXMLHTTP();

objXMLHTTP.open("post", "teste.asp", true);

objXMLHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

objXMLHTTP.onreadystatechange=function(){

if (objXMLHTTP.readyState==4){

string_json = objXMLHTTP.response;

person_list = null;

try{

person_list = eval(string_json);

}catch(ee){

}

if(person_list){

document.write(person_list[0].first_name);

document.write(person_list[0].last_name);

}

}}

objXMLHTTP.send();

}

</script>

<body onload="carregaDados()">

</body>

</html>

Continua aparecendo "undefinedundefined" na página cliente.

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Tente colocar POST em vez de post.

e

objXMLHTTP.send(null)
em vez de
objXMLHTTP.send()

Agora fiquei com uma pulga atras da orelha:

se você não vai enviar nenhum dado, porque usar POST e não GET.

Editado por lucas.js
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...