jQuery的POST触发器"完成"但没有提交数据

时间:2013-08-16 15:14:20

标签: javascript jquery ajax forms

我想用AJAX提交表单。我写了一个按下按钮触发这个功能的函数:

function putUser() {
    $('button#putUser').on('click', function() {
        var user = $('input#user').val(),
            amount = $('input#amount').val(),
            what = $('input#amount').val(),
            country = $('input#country').val(),
            platform = $('input#platform').val(),
            formUrl = $('form#sendUser').attr('action');

        var data = {
            user: user,
            amount: amount,
            what: what,
            country: country,
            platform: platform
        }

        $.post(formUrl, $('#sendUser').serialize(), function() {
            alert('test');
        }).done(function() { alert('done')})

        return false;
    })
}

这在理论上有效,因为我得到了done警报。但是没有提交数据。怎么了?我的SQL语句工作正常。

我的PHP代码:

if(isset($_POST['putUser'])) {
    $user = $_POST['user'];
    $amount = $_POST['amount'];
    $what = $_POST['what'];
    $country = $_POST['country'];
    $platform = $_POST['platform'];

    $query = mysql_query('INSERT INTO sells (id, user, amount, what, country, platform) '
        . 'VALUES (NULL , "' . mysql_real_escape_string($user) . '", "' . mysql_real_escape_string($amount) . '", "' . mysql_real_escape_string($what) . '", "' . mysql_real_escape_string($contry) . '", "' . mysql_real_escape_string($platform) . '")');

    if($query) {
        echo 'ok';
    } else {
        die(mysql_error());
    }
}

3 个答案:

答案 0 :(得分:2)

我会将putUser param更改为get param。

<form action="sendUser.php?putUser">

PHP

if(isset($_POST['putUser'])) {

JS

function putUser() {
    $('#sendUser').on('submit', function() {
        var formUrl = $(this).attr('action');

        $.post(formUrl, $(this).serialize(), function() {
            alert('test');
        }).done(function() { alert('done')})

        return false;
    })
}

也改为提交事件而不是点击,这使我可以进一步使用this而不是选择器。

答案 1 :(得分:1)

什么是$('#sendUser').serialize()?这是你为data构建的表单吗?

修改: 尝试使用dataType'json'作为帖子 - http://api.jquery.com/jQuery.post/

答案 2 :(得分:0)

看起来您实际上并不是要发送要提交的数据。

请注意,$('#sendUser').serialize()已更改为您的data对象。并且putUser已添加到data,以便服务器端代码识别它。

我想你想要这个:

function putUser() {
    $('button#putUser').on('click', function() {
        var user = $('input#user').val(),
            amount = $('input#amount').val(),
            what = $('input#amount').val(),
            country = $('input#country').val(),
            platform = $('input#platform').val(),
            formUrl = $('form#sendUser').attr('action');

        var data = {
            putUser: true,
            user: user,
            amount: amount,
            what: what,
            country: country,
            platform: platform
        }

        $.post(formUrl, data, function() {
            alert('test');
        }).done(function() { alert('done')})

        return false;
    })
}