Serializing and submitting a form with jQuery and PHP

你。 提交于 2019-11-26 05:56:24

问题


I\'m trying to send a form\'s data using jQuery. However, data does not reach the server. Can you please tell me what I\'m doing wrong?

My HTML form:

<form id=\"contactForm\" name=\"contactForm\" method=\"post\">
    <input type=\"text\" name=\"nume\" size=\"40\" placeholder=\"Nume\">
    <input type=\"text\" name=\"telefon\" size=\"40\" placeholder=\"Telefon\">
    <input type=\"text\" name=\"email\" size=\"40\" placeholder=\"Email\">
    <textarea name=\"comentarii\" cols=\"36\" rows=\"5\" placeholder=\"Message\"></textarea> 
    <input id=\"submitBtn\" type=\"submit\" name=\"submit\" value=\"Trimite\">
</form>


JavaScript (in the same file as the above form):

<script type=\"text/javascript\">
    $(document).ready(function(e) {

        $(\"#contactForm\").submit(function() {
            $.post(\"getcontact.php\", $(\"#contactForm\").serialize())
            // Serialization looks good: name=textInNameInput&&telefon=textInPhoneInput etc
            .done(function(data) {
                if (data.trim().length > 0) {
                    $(\"#sent\").text(\"Error\");   
                } else {
                    $(\"#sent\").text(\"Success\");
                }
            });

            return false;
        })
    });
</script>


Server side PHP (/getcontact.php):

$nume = $_REQUEST[\"nume\"]; // $nume contains no data. Also tried $_POST
$email = $_REQUEST[\"email\"];
$telefon = $_REQUEST[\"telefon\"];
$comentarii = $_REQUEST[\"comentarii\"];


Can you please tell me what I am doing wrong?


UPDATE

Checked var_dump($_POST) and it returned an empty array.

The weird thing is that the same code tested on my local machine works fine. If I upload the files on my hosting space it stops working. I tried doing an old-fashioned form without using jQuery and all data was correct.

I don\'t see how this would be a server configuration problem. Any ideas?

Thank you!


回答1:


You can use this function

var datastring = $("#contactForm").serialize();
$.ajax({
    type: "POST",
    url: "your url.php",
    data: datastring,
    dataType: "json",
    success: function(data) {
        //var obj = jQuery.parseJSON(data); if the dataType is not specified as json uncomment this
        // do what ever you want with the server response
    },
    error: function() {
        alert('error handling here');
    }
});

return type is json

EDIT: I use event.preventDefault to prevent the browser getting submitted in such scenarios.

Adding more data to the answer.

dataType: "jsonp" if it is a cross-domain call.

beforeSend: // this is a pre-request call back function

complete: // a function to be called after the request ends.so code that has to be executed regardless of success or error can go here

async: // by default, all requests are sent asynchronously

cache: // by default true. If set to false, it will force requested pages not to be cached by the browser.

Find the official page here




回答2:


You can add extra data with form data

use serializeArray and add the additional data:

var data = $('#myForm').serializeArray();
    data.push({name: 'tienn2t', value: 'love'});
    $.ajax({
      type: "POST",
      url: "your url.php",
      data: data,
      dataType: "json",
      success: function(data) {
          //var obj = jQuery.parseJSON(data); if the dataType is not     specified as json uncomment this
        // do what ever you want with the server response
     },
    error: function() {
        alert('error handing here');
    }
});



回答3:


Have you checked in console if data from form is properly serialized? Is ajax request successful? Also you didn't close placeholder quote in, which can cause some problems:

 <textarea name="comentarii" cols="36" rows="5" placeholder="Message>  



回答4:


Have you looked in firebug if POST or GET?.

check the console display.

Put in the test script:

console.log(data);

You can see the response from the server, if it shows something.




回答5:


The problem can be PHP configuration:

Please check the setting max_input_vars in the php.ini file.

Try to increase the value of this setting to 5000 as example.

max_input_vars = 5000

Then restart your web-server and try.




回答6:


See the answer from this previous post. Than you can use .post() or .get() to send serialized data to server.

Convert form data to JavaScript object with jQuery

Anyway, it is very confusing your situation caused by this lack of details.

If you're using a web server (non-local) this code can be wrong if you forget to setup the actual jquery link. I don't know even if you refer jquery on absolute path or relative path!?




回答7:


 $("#contactForm").submit(function() {

    $.post(url, $.param($(this).serializeArray()), function(data) {

    });
 });



回答8:


Two End Registration or Users Automatically Registered to "Shouttoday" by ajax when they Complete Registration by form submission.

var deffered = $.ajax({
     url:"code.shouttoday.com/ajax_registration",
     type:"POST",
     data: $('form').serialize()
    }); 

        $(function(){ 
            var form;
            $('form').submit( function(event) {
                var formId = $(this).attr("id");
                    form = this;
                event.preventDefault();
                deffered.done(function(response){
                    alert($('form').serializeArray());alert(response);
                    alert("success");
                    alert('Submitting');
                    form.submit();
                })
                .error(function(){
                    alert(JSON.stringify($('form').serializeArray()).toString());
                    alert("error");
                    form.submit();
                });
            });
         });



回答9:


<script type="text/javascript">
$(document).ready(
        function() {
            populateUser();
            $("#user").submit(
                    function(e) {
                        e.preventDefault();
                        jQuery.ajaxSetup({
                            async : false
                        });
                        if ($("#roleId").val() != 'Select role') {
                            $.post($(this).attr("action"), $(this)
                                    .serialize(), function(response) {
                                alert(response.message);
                                $("#user")[0].reset();
                                populateUser();
                                jQuery.ajaxSetup({
                                    async : true
                                });
                            });
                        } else {
                            alert("Please Select the role of user");
                        }
                    })
        });



来源:https://stackoverflow.com/questions/15173965/serializing-and-submitting-a-form-with-jquery-and-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!