Pergunta

Eu preciso para detectar onde o usuário acabou de clicar a partir - como as minhas necessidades de conteúdo AJAX a ser exibido de forma diferente dependendo da página de origem é para ser inserido.

Se é para ir para about.php ele precisa ser apenas dados, mas se é para ir para cerca de-main.php ele precisa ser toda a coluna do meio assim precisa de um invólucro cabeçalho / rodapé em torno dos dados.

O html chamado via AJAX é realizada em uma página php que usa este código para ver quem está pedindo, em seguida, formata a resposta HTML adequada.

$array[] = "/cf/about.php";
$array[] = "/cf/about/about-main.php";
$array[] = "/cf/about/other-page.php";


$ispage = "";
foreach ($array as $value) {
    if ($_SERVER['HTTP_REFERER'] != $value) {
        $ispage = "";
    } else {
        $ispage = "woot";
    }
}
if ($ispage == "woot") {
        echo $content;
    } else {
        include_once 'about-header.php';
        echo $content;  
        include_once 'about-footer.php';
}

O problema é ... HTTP_REFERER parece ser um pouco errática. Ele funciona muito bem, enquanto eu estou no trabalho na rede, mas eu tentei isso no meu computador em casa e é, obviamente, completamente falta de trabalho - os resultados são horríveis: o

Existe outra maneira de conseguir isso? Eu acho que as variáveis ??de sessão poderia ser usado mas então eu não tenho muita experiência nisso!

Todas e quaisquer sugestões / dicas são apreciados;) Obrigado!

edit:

A página é realmente uma página de perfil pessoal. A sua localização normal é about.php ea 2ª coluna div exibe uma grade de miniaturas, que quando clicado, carregar o perfil naquele lugar via AJAX. Todos agradável e simples -. Traseiras botão recarrega a grade de fotos

O problema é que cada membro da equipe também precisa de uma página estática. Eu criei estes em cerca de / pessoal-name.php. O conteúdo é o mesmo embora. Eu quero o servidor para detectar se alguém veio diretamente para a sobre / equipe-name.php e se assim for, enrole um cabeçalho / rodapé em torno dele.

Se o pedido veio da grade de fotos (ie AJAX), então ele não precisa do invólucro cabeçalho / rodapé.

Isso está claro? : O

1) Se o pedido AJAX - nenhum envoltório 2) Se não AJAX pedido - add cabeçalho / rodapé invólucro

Foi útil?

Solução

Não seria mais fácil simplesmente passar uma bandeira em sua chamada AJAX para dizer ao script que tipo de conteúdo a ser exibido?

Editar:

Assim, cerca de / pessoal-name.php exibe o conteúdo. Chamá-lo via AJAX como sobre / equipe-name.php? FromAjax = 1

Em seguida, no arquivo sobre / equipe-name.php:

if (isset($_REQUEST['FromAjax']) ) {
    echo $content;
} else {
    include_once 'about-header.php';
    echo $content;  
    include_once 'about-footer.php';
}

Outras dicas

Não importa o que, o Referer não é uma informação que você deve basear seu site inteiro em cima: ele é enviado pelo cliente, o que significa (pelo menos):

  • o cliente não necessariamente tem que enviá-lo
    • ele pode ser desativado no navegador
    • algum firewall / antivírus removê-lo
  • ele pode ser forjado / alterado (uma maneira fácil com o firefox é usar uma extensão para fazer isso)

Você definitivamente deve encontrar uma maneira melhor / Saffer / mais confiável para fazer o que você precisa.

Uma solução (que você já descartado) seria passar uma informação additionnal em todos os seus links, dizendo qual página o pedido vem. Na minha opinião, este seria provavelmente a melhor coisa a fazer ...

Talvez uma maneira mais simples seria a de adicionar um parâmetro ao seu pedido Ajax, dizendo de onde vem? ou seja, em vez de confiar na Referer no script PHP, basta ter um olhar para um parâmetro no pedido, que agiria como uma "espécie de referer", mas colocou por você?

Não será mais seguro (os usuários podem ainda pedido forja, com esse parâmetro) , mas, pelo menos, não seria deficientes físicos / modificado (exceto se o usuário faz isso à mão)


No final, você também dizer o seguinte:

1) Se o pedido AJAX - nenhum envoltório
2) Se não AJAX pedido - add cabeçalho / rodapé envoltório

Bem, se é apenas uma questão de determinar se o script PHP foi chamado através de uma solicitação do Ajax, também aqui, duas soluções:

  • Adicionar um parâmetro para a solicitação quando ele é feito por meio do Ajax (você só adicionar este parâmetro no script JS fazer o pedido, e quando o parâmetro é aqui, PHP sabe que é uma solicitação Ajax)
  • Ou, no script PHP, olhar para um X-Requested-With cabeçalho HTTP, que é muitas vezes aqui com o valor XMLHttpRequest quando uma solicitação é feita através de uma chamada Ajax. (Mas você deve verificar se ele está configurado com o seu JS Framework / ou talvez isso depende do navegador - não tenho certeza sobre isso :-()

Por que você não apenas criar as páginas estáticas no servidor sem usar ajax em tudo, incluindo o cabeçalho e rodapé eo bit perfil? Se a página é estática você não deve ter qualquer necessidade de conteúdo de carga usando javascript.

Se você precisa carregá-lo usando javascript, então a solução da Vex é bom. Você poderia passar alguns parâmetros opcionais na chamada ajax que controlar a forma como a página é processada - de que maneira, a página incluída não precisa saber sobre as páginas que o utilizam, apenas precisa de compreender os parâmetros que dizem que como renderizar em si. Você pode, em seguida, reutilizá-lo mais facilmente no futuro.

Eu notei um erro em seu código no entanto - este provavelmente não vai funcionar como esperado:

$ispage = "";
foreach ($array as $value) {
    if ($_SERVER['HTTP_REFERER'] != $value) {
        $ispage = "";
    } else {
        $ispage = "woot";
    }
}

Se um nome da página é correspondido, mas, em seguida, o próximo não é, $ ispage será definido de volta para ''. Você provavelmente melhor seria fazer algo como:

$ispage = "";
foreach ($array as $value) {
    if ($_SERVER['HTTP_REFERER'] == $value) {
        $ispage = "woot";
        break;
    }
}

ou

$ispage = '';
if (in_array($_SERVER['HTTP_REFERER'], $array)) {
    $ispage = 'woot';
}

Tai kucing -

Se você formatar seus links como este:

<a href="http://www.this-is-a-link.html?setvariablehere=yes">link</a>

Então, o php só precisa ser este:

if (isset($_REQUEST['setvariablehere']) ) {
    do something for when variable IS set
} else {
    do something for when variable IS NOT set
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top