Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
A requisição é assyncrona, ou seja, o return é enviado antes da requisição voltar.
Estude sobre promises, ou use ajax syncrono.
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 undefinedEstá 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();
}Ops, desculpe ai William fiz do jeito que você falou agora
mais ainda assim o resultado esta dando undefined
Oi @Brambilla,
Como vc fez ?
eu testei aqui e o código está correto. Onde está a sua chamada a função sendRequest() ?
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 certoisso 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.
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
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.
Quanto ao cookie esta gravado, só falta verificar se ele existe para não abrir a notificação novamente
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.
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); }
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.