Brambilla 0 Denunciar post Postado Fevereiro 5, 2014 Bom dia estou tentando fazer uma chamada ajax e retorna undefined function sendRequest(loja) { document.write("Sending request"); var req = new XMLHttpRequest(); req.open("GET", "ajax.php?loja="+loja, true); req.onreadystatechange = function() { if (req.readyState == 4) { if (req.status == 200) { // alert(req.responseText); // document.write("OK"); } } }; alert(req.send()); // retorna undefined return req.send(); } no arquivo ajax.php esta assim if($_COOKIE['gv_'.$_GET['loja']]) { $res = 0; } else { $res = 1;} echo $_COOKIE['gv_'.$_GET['loja']]; return $res; onde que estou errando? obrigado att. Brambilla Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Fevereiro 5, 2014 Ajax não reconhece retorno de métodos, apenas output (impressão) tal qual um navegador. Basicamente você deve alterar return para echo/print ou qualquer outro tipo de método de output. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 5, 2014 A requisição é assyncrona, ou seja, o return é enviado antes da requisição voltar. Estude sobre promises, ou use ajax syncrono. Compartilhar este post Link para o post Compartilhar em outros sites
Brambilla 0 Denunciar post Postado Fevereiro 5, 2014 Vamos ver se estou no caminho certo if($_COOKIE['gv_'.$_GET['loja']]) { $res = 0; } else { $res = 1;} echo $res; ficaria +/- assim function sendRequest(loja) { document.write("Sending request"); var req = new XMLHttpRequest(); req.open("GET", "ajax.php?loja="+loja, false); req.onreadystatechange = function() { if (req.readyState == 4) { if (req.status == 200) { // alert(req.responseText); // document.write("OK"); } } }; alert(req.send()); return req.send(); } mais porém continua dando undefined Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 5, 2014 Está errado. Vc não fez nada do que eu disse. function sendRequest(loja) { //não use document.write var req = new XMLHttpRequest(); req.open("GET", "ajax.php?loja="+loja, false); req.onreadystatechange = function() { if (req.readyState == 4 && req.status == 200) { alert(req.responseText); return req.responseText; } }; req.send(); } Compartilhar este post Link para o post Compartilhar em outros sites
Brambilla 0 Denunciar post Postado Fevereiro 5, 2014 Ops, desculpe ai William fiz do jeito que você falou agoramais ainda assim o resultado esta dando undefined Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 5, 2014 Oi @Brambilla, Como vc fez ? eu testei aqui e o código está correto. Onde está a sua chamada a função sendRequest() ? Compartilhar este post Link para o post Compartilhar em outros sites
Brambilla 0 Denunciar post Postado Fevereiro 5, 2014 Pois é é que estou desenvolvendo uma extensão para o Chrome e esse código executa no background segue o código completo function sendRequest(Loja) { var req = new XMLHttpRequest(); req.open("GET", "ajax.php?loja="+Loja, false); req.onreadystatechange = function() { if (req.readyState == 4 && req.status == 200) { //alert(req.responseText); // AQUI EXIBE O CODIGO PHP COMPLETO return req.responseText; } }; alert(req.send()); // AQUI DA UNDEFINED req.send(); } function checkForValidUrl(tabId, changeInfo, tab) { var urlArray = ['americanas', 'submarino', 'netshoes', 'centauro']; var Loja = ''; var res = ''; for (var i = 0, iLen = urlArray.length; i < iLen; i++) { if(tab.url.indexOf(urlArray[i]) > -1 && (tab.url.indexOf('dominio.com/app/') < 1)) { Loja = urlArray[i]; // criar notificação se cookie não existir res = sendRequest(Loja); alert(res); if(!res) { createNotification(tab.title, tabId, tab.url, Loja, res); } } } }; chrome.tabs.onUpdated.addListener(checkForValidUrl); function createNotification(titulo, tabId, url, Loja, res) { var opt = { type: "basic", title: "identificou um parceiro", message: "Faça agora mesmo o login", iconUrl: "images/icon.png", buttons: [{title: "Avançar", iconUrl: "images/icon16.png"}, {title: "Gerar Produto"}], contextMessage: res, } url = url.replace('http://', ''); url = url.replace('https://', ''); chrome.notifications.create("NotifGV", opt, function(){}); setTimeout(function(){chrome.notifications.clear("NotifGV",function(){});}, 15000); chrome.notifications.onButtonClicked.addListener(function(notifId, btnIdx) { if(btnIdx === 0) { } else if (btnIdx === 1) { chrome.tabs.create({url : "popup.html"}); } }); } function RedirURL() { chrome.notifications.clear("NotifGV",function(){}); } acredito que é por causa disso que não da certo Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 5, 2014 isso aqui: alert(req.send()); // AQUI DA UNDEFINEDnão faz sentido nenhum. Notou que não tem esse alert no meu código ? O correto é o alert que eu coloquei: alert(req.responseText); se está "exibindo" o código php completo, é pq não está processando o seu php. E se vc está escrevendo uma extensão para browser, vc não deveria estar usando uma linguagem server-side embutida nessa extensão. Compartilhar este post Link para o post Compartilhar em outros sites
Brambilla 0 Denunciar post Postado Fevereiro 5, 2014 Uhum, certo, tem toda razão, utilizei como alternativa pois tentei jquery, javascript e o próprio manual do chome extension cookies, e não tive sucesso, sempre deu null ou undefined Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 5, 2014 Não dá para vc gravar um cookie sem informar a qual domínio e path ele pertence. Além disso, não dá pra vc usar linguagem server-side em uma extensão de browser, pq só executa código client-side. Compartilhar este post Link para o post Compartilhar em outros sites
Brambilla 0 Denunciar post Postado Fevereiro 5, 2014 Quanto ao cookie esta gravado, só falta verificar se ele existe para não abrir a notificação novamente Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 5, 2014 lê com js: function getCookie(c_name){ var i,x,y,ARRcookies=document.cookie.split(";"); for (i=0;i<ARRcookies.length;i++) { x=ARRcookies.substr(0,ARRcookies.indexOf("=")); y=ARRcookies.substr(ARRcookies.indexOf("=")+1); x=x.replace(/^\s+|\s+$/g,""); if (x==c_name) { return unescape(y); } } } Mas confira para qual domínio/path vc gravou, pq se vc tiver tentando ler de um domínio/path diferente do qual ele foi gravado, vc não conseguirá ler nunca. Compartilhar este post Link para o post Compartilhar em outros sites
Brambilla 0 Denunciar post Postado Fevereiro 5, 2014 Obrigado William tinha haver com o path e o domain resumindo utilizei a função do próprio chrome extension chrome.cookies.get({ url: 'http://dominio.com', name: 'gv_'+Loja}, function (cookies) { if(!cookies) { createNotification(tab.title, tabId, tab.url, Loja, res); } Compartilhar este post Link para o post Compartilhar em outros sites