Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

danielfpaiva

Pedido AJAX retorna um array vazio

Mensagens Recomendadas

danielfpaiva

Boa noite,

Eu tenho um formulário com o seguinte código:

<div class="form-wrap" id="contact-form">
        <div class="form-innerwrap">
            <div class="text-input">
                <input type="text" name="name" id="name" required />
                <label for="name"><?= CONTACT_FORM_NAME ?></label>
            </div>

            <div class="text-input">
                <input type="email" name="email" id="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" required />
                <label for="email">E-mail</label>
            </div>

            <div class="text-input">
                <input type="text" name="contact" id="contact" required />
                <label for="name"><?= CONTACT ?></label>
            </div>

            <div class="text-input text-textarea">
                <textarea type="info" id="info" name="info">

                 </textarea>
                <label for="email"><?= CONTACT_FORM_MENSSAGE ?></label>
            </div>
            <input type="hidden" name="lang" id="lang" value="<?= $_SESSION['language'] ?>">
            <div class="form-button">
                <button type="submit" class="btn contacts-button btn-gowe" id="btn-info" data-btnhover="<?= CONTACT_FORM_BTN ?>"> <span><?= CONTACT_FORM_BTN ?></span> </button>
            </div>
        </div>
    </div>

e quando clico no botão btn-info é realizado um pedido ajax para enviar a informação para o PHP utilziando o seguinte código:

 

$("#btn-info").click(function(){
            var name = $("#name").val();
            var email = $("#email").val();
            var contact = $("#contact").val();
            var info = $("#info").val();
            var lang = $("#lang").val();
            // Returns successful data submission message when the entered information is stored in database.
            var dataString = 'name='+ name + '&email='+ email +'&contact='+contact+'&info='+info+'&lang='+lang;
            $.ajax({
                type: "POST",
                url: "includes/sendEmail.php",
                data: dataString,
                cache: false,
                success: function(result){
                    var result = result.split("||");
                    if (result[0]== "true"){
                        $("#contact-modal").show();
                    }
                }
            });
            return false;
        });

No entanto quando faço var_dump($_REQUEST); é devolvido um array vazio.

Será que alguém me pode ajudar a perceber qual é o erro?
Eu já estive várias horas a tentar perceber o problema e não consegui descobrir qual é o problema.

Obrigado pela ajuda.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
washalbano

Olá!
Você precisa verificar no seu arquivo includes/sendEmail.php, se está trabalhando com o médoto post
Abra a aba network no devtools do browser, e certifique-se de que as variáveis e valores estão chegando corretamente.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jmta_92
15 horas atrás, danielfpaiva disse:

Boa noite,

Eu tenho um formulário com o seguinte código:


<div class="form-wrap" id="contact-form">
        <div class="form-innerwrap">
            <div class="text-input">
                <input type="text" name="name" id="name" required />
                <label for="name"><?= CONTACT_FORM_NAME ?></label>
            </div>

            <div class="text-input">
                <input type="email" name="email" id="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" required />
                <label for="email">E-mail</label>
            </div>

            <div class="text-input">
                <input type="text" name="contact" id="contact" required />
                <label for="name"><?= CONTACT ?></label>
            </div>

            <div class="text-input text-textarea">
                <textarea type="info" id="info" name="info">

                 </textarea>
                <label for="email"><?= CONTACT_FORM_MENSSAGE ?></label>
            </div>
            <input type="hidden" name="lang" id="lang" value="<?= $_SESSION['language'] ?>">
            <div class="form-button">
                <button type="submit" class="btn contacts-button btn-gowe" id="btn-info" data-btnhover="<?= CONTACT_FORM_BTN ?>"> <span><?= CONTACT_FORM_BTN ?></span> </button>
            </div>
        </div>
    </div>

e quando clico no botão btn-info é realizado um pedido ajax para enviar a informação para o PHP utilizando o seguinte código:

 


$("#btn-info").click(function(){
            var name = $("#name").val();
            var email = $("#email").val();
            var contact = $("#contact").val();
            var info = $("#info").val();
            var lang = $("#lang").val();
            // Returns successful data submission message when the entered information is stored in database.
            var dataString = 'name='+ name + '&email='+ email +'&contact='+contact+'&info='+info+'&lang='+lang;
            $.ajax({
                type: "POST",
                url: "includes/sendEmail.php",
                data: dataString,
                cache: false,
                success: function(result){
                    var result = result.split("||");
                    if (result[0]== "true"){
                        $("#contact-modal").show();
                    }
                }
            });
            return false;
        });

No entanto quando faço var_dump($_REQUEST); é devolvido um array vazio.

Será que alguém me pode ajudar a perceber qual é o erro?
Eu já estive várias horas a tentar perceber o problema e não consegui descobrir qual é o problema.

Obrigado pela ajuda.

Adicione ao pedido ajax estas 2 opçoes:

processData: false,
    contentType: false,

 

no php em vez de  var_dump($_REQUEST); faça var_dump($_POST);

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
danielfpaiva
Em 06/11/2018 às 15:55, jmta_92 disse:

Adicione ao pedido ajax estas 2 opçoes:

processData: false,
    contentType: false,

 

no php em vez de  var_dump($_REQUEST); faça var_dump($_POST);

Continua a não funcionar e a devolver um array vazio

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
danielfpaiva
Em 06/11/2018 às 00:42, washalbano disse:

Olá!
Você precisa verificar no seu arquivo includes/sendEmail.php, se está trabalhando com o médoto post
Abra a aba network no devtools do browser, e certifique-se de que as variáveis e valores estão chegando corretamente.

Eu reparei que no Network está a devovler o status 302 mas não sei o que isso significa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
danielfpaiva

Já consegui resolver o problema estava relacionado com o facto de ter estas duas linhas no ficheiro .htaccess

 

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f [NC]
RewriteRule ^ %{REQUEST_URI}.php [L]

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.