Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoas, estou querendo pegar informações via AJAX com AngularJS, já havia testando antes com Jquery e tem o mesmo resultado, os valores que adquiro são perdidos fora da função de AJAX. Tento passar para a variável global, mas o valor passado somente funciona dentro da função AJAX dos frameworks. Deixarei o código que estou testando para isso. Estou estudando AngularJS, mas como falei anteriormente tem o mesmo resultado em Jquery:
Base:
<div class="jquery">
<pre></pre>
</div>
<div ng-controller="modelo01">
{{teste01}}
</div>
<div ng-controller="modelo02">
{{teste02}}
</div>
<!-- Javascript code -->
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
var myApp = angular.module("myApp", []);
var testando = "Teste Ok!";
(function () {
jQuery.ajax("teste.json").done(function (data) {
testando = data;
jQuery(".jquery pre").text(testando);
})
jQuery(".jquery pre").text(testando);
})();
myApp.controller("modelo01", ["$scope", "$http", function ($scope, $http) {
$http.get("teste.json").success(function (data, status, headers, config) {
testando = data;
});
$scope.teste01 = testando + " 1 Sem Ajax";
}])
myApp.controller("modelo02", ["$scope", function ($scope) {
$scope.teste02 = testando + " 2";
}])
</script>
<!-- Javascript code -->
teste.json:
{
"contatos":
[
{
"nome": "Fulano",
"Sobrenome": "Pinheiro"
},
{
"nome": "Cicrano",
"Sobrenome": "Cumpadi"
},
{
"nome": "Beltrano",
"Sobrenome": "Silva"
}
]
}
Sim, um detalhe que me passou despercebido, mas isso significa que a aplicação deva ser toda via AJAX?
Consegui ter o resultado desejado usando cookies do Angular, mas não queria usar Cookies ou Sessions no momento.
Minha ideia é desenvolver uma aplicação com alguns controllers que um deles pega algumas informações via Ajax que será útil para os demais Controllers e ao mexer em um, altera os valores de outros, por isso meu interesse em variáveis globais. vi recente o uso do ng-model do Angular, o que vai me ser útil também.
resumindo: como poderia trabalhar com valores adquiridos via Ajax? E porque Ajax não substitui os valores já definidos na "primeira leitura do código".
Não não... variáveis globais são ruins!
Vc tem que pensar em camadas.
HTML é informação.
JavaScript é manipulação.
O js trás os dados, inputa no html e o seu próximo js lê do html.
É assim que o teu sistema tem que trabalhar.
Viu o que eu sugeri ?
O JS percebe um pedido, vai no server, busca o dado, e coloca no html que é a camada de informação.
O próximo js vai buscar o dado do html ou do server. Mas o js não deve ter a informação "nele".
O ajax substitui sim os valores, mas vc não conseguiu ver por causa do assincronismo, ou seja, quando vc tentou ler, o ajax ainda não tinha voltado.
Hum... acho que entendi. É que eu não queria ficar consultado direto as informações, queria consultar apenas uma vez pois essas informações, que seriam configuração padrão, serão sempre consultadas para fins de comparação com valores alterados pelos usuários. Creio que assim melhoraria a performance da aplicação.
sim, melhora.
mas dai vc faz o que eu disse: coloque no html.
Se for fazer cache em memória, vc vai precisar estudar muito bem essa parte de assincronismo, e ver se realmente vale a pena usar assim.
Bem, vou retomar esse projeto em breve, creio que no final da semana. É algo pessoal e pode esperar, qualquer coisa eu volto com as dúvidas, mas entendi o que quis dizer com inserir no HTML e vou por esse caminho mesmo, mesmo que eu ponha em Input Hidden, pois essas configurações serão pequenas.
Meu maior problema será uma parte cujas informações serão textos, mas isso eu vejo com calma.
Não é questão de "perder", na verdade é que ajax roda assincronamente.
Logo, a próxima linha é executada antes da requisição voltar. Por isso, que você acha que "perdeu", enquanto na verdade, você ainda nem tinha o dado.
Vamos lá, código assincrono funciona assim:
-> você dispara uma requisição
-> O código continua, independente do resultado da requisição, ou seja, a próxima linha do código não espera a requisição voltar.
Tanto o angular quanto o jQuery.ajax utilizam ajax assincrono, por isso o teu resultado é o mesmo.
Entendeu o ponto ?