Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Brambilla

Chamada ajax no php

Recommended Posts

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

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

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

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

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

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

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

isso aqui:

alert(req.send()); // AQUI DA UNDEFINED
nã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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.