jquery ajax加载表单提交将序列化数据设置为url

时间:2014-05-07 16:08:07

标签: php jquery ajax forms submit

我正在制作一些网页应用程序,它可以在不刷新页面的情况下加载页面。这一切都很好,但现在我在其中一个页面上有一个表格。我想提交没有页面刷新的表单。但是当我用ajax加载它后我提交表单时,浏览器中的url将从

更改

本地主机/文件/项目/测试/

localhost.documents /项目/测试/ FORM_TYPE =寄存器&安培;用户名=安培;如first_name =安培; surname_prefix =安培;姓=安培;姓=安培;电子邮件=

当我只是将表单html放在我的index.php中并在那里提交它工作正常。 我希望有人可以告诉我我做错了什么以及如何解决它。

index.php的一部分

<div class="message"></div>
<div id="content">
    <div id="page">
<div class="form_container">
<form id="form">
    <input type="hidden" name="form_type" value="register" />
    <input class="type_text" type="text" name="username"  maxlength="20" placeholder="username" />
    <input class="type_text" type="text" name="first_name" maxlength="50" placeholder="First Name" />
    <input class="type_text" type="text" name="surname_prefix" maxlength="20" placeholder="Surname Prefix" />
    <input class="type_text" type="text" name="surname" maxlength="50" placeholder="Surname" />
    <label class="label" for="birth_date">dd-mm-jjjj</label>
    <input id="birth_date" class="type_text" type="text" name="birth_date" maxlength="10" placeholder="Birth Date" />       
    <input class="type_text" type="text" name="email" placeholder="Email Address" />
    <input class="type_submit" type="submit" value="Register" />
</form>
</div>
</div>  

pageHandler.js

$(document).ready(function() {
var request;

    //page handler
    //pageRequest('home');
$('.click').click(function(event) {
    var temp = $(this).attr('id');
    var pages = ['home','register'];
    if($.inArray(temp, pages) !== -1) {
        pageRequest(temp);
        //$('.message').html(temp);
    }   
    event.preventDefault();
}); 

function pageRequest(temp) {
    var page = $('#page');
    if(typeof ajax_request !== 'undefined') {
        request.abort();
    }       
    request = $.ajax({
        type: "POST",       
        url: "core/posts.php",
        data: 'temp=' + temp
    });
    request.done(function(data) {
        page.fadeOut(function() {
            page.html('');
            page.html(data).fadeIn();
        }); 
    });
    request.fail(function(jqXHR, textStatus) {
        page.fadeOut(function() {
            page.html('');
            page.html(textStatus).fadeIn();
        });
    }); 
}

//form handler
$('#page').delegate( "#form", "submit", function(event) {
    var $form = $(this);
    var $inputs = $form.find("input, select, button, textarea");
    var serializedData = $form.serialize();
    $inputs.prop("disabled", true);
    formRequest(serializedData);
    event.preventDefault();     
});     

function formRequest(values) {
    var message = $('.message');
    if(typeof ajax_request !== 'undefined') {
        request.abort();
    }       
    request = $.ajax({
        url: "core/posts.php",
        type: "POST",
        data: values
    }); 
    request.done(function(data) {
        message.fadeOut(function() {
            message.html('');
            message.html(data).fadeIn();
        });
    });
    request.fail(function(jqXHR, textStatus) {
        message.fadeOut(function() {
            message.html('');
            message.html(textStatus).fadeIn();
        });
    }); 
}   
});

posts.php

If(isset($_POST['temp'])) {
    $temp = $_POST['temp'];
    $url = '../content/templates/'.$temp.'.html';
    if(file_exists($url)) {
        $html = file_get_contents($url);
        echo $html;
    }
    else {
        echo 'Sorry, couldn\'t find the page.';
    }       
}
//form handler
if(isset($_POST['form_type'])) {
    require_once('../admin/config/database.functions.php');
    $function = new myDBFunctions();
    switch($_POST['form_type']) {
        case 'register' :
            $username = $_POST['username'];
            $firstname = $_POST['first_name'];
            $surnamep = $_POST['surname_prefix'];
            $surname = $_POST['surname'];
            $birthdate = $_POST['birth_date'];              
            $email = $_POST['email'];
            echo 'Thanks for your registration';                    
            break;
        case 'login' :
            echo 'login';
            break;
        case 'password_recovery' :
            echo 'password recovery';
            break;  
    }
}

我发现了问题,但不是为什么会发生这个问题。我的posts.php文件中有一个$ _POST ['username'],而html输入字段的名称是Username。我已经改变了这一点,现在浏览器中的url不再改变了。我很高兴我找到了问题,但我仍然不明白为什么ajax发送的数据会在网址中显示。

1 个答案:

答案 0 :(得分:0)

“我想提交没有要刷新页面的表单”

有几种方法可以做到这一点,我认为最简单的方法就是拦截并阻止表格像普通的HTML表单一样实际提交,而是使用表单字段中的数据进行ajax调用。

为此,您需要拦截表单的提交事件,获取表单中所有输入的值,并使用数据与服务器进行ajax调用:

<form id="myForm">
  ....
</form>
<script>
$('#form').on("submit", function(event) {
  // stop the form from submitting
  event.preventDefault();

  // get data in the inputs of the form
  var data = {};
  var $inputs = $('#form').children("input, select, textarea");
  inputs.each(function($element){
    data[$element.attr('name')] = $element.val();
  });

  // submit data to the backend
  request = $.ajax({
    type: "POST",       
    url: "",
    data: data
  });
});
</scipt>