Jump to content
danielfpaiva

Pedido AJAX retorna um array vazio

Recommended Posts

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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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);

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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]

Share this post


Link to post
Share on other sites
Vitor Leal
Em 06/11/2018 às 00:01, 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 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.

Boas! No jQuery tu consegues poupar imenso trabalho ao usar a função jQuery "serialize". 

"The .serialize() method creates a text string in standard URL-encoded notation. It can act on a jQuery object that has selected individual form controls, such as <input>, <textarea>, and <select>: $( "input, textarea, select" ).serialize();"

Ou então usas a função serializeArray().

"The .serializeArray() method creates a JavaScript array of objects, ready to be encoded as a JSON string. It operates on a jQuery collection of forms and/or form controls."

 

Na resposta de um ficheiro php durante um pedido de ajax é aconselhável converter a resposta para json_encode e de seguida fazer um $.parseJSON(data) no success do ajax.

É só uma dica.


Vitor Leal

Redicom Desenvolver Web

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.