使用AJAX通过POST / GET提交表单

时间:2015-03-18 12:54:57

标签: php jquery ajax forms get

目前我在我的网站上有一个喜欢/不喜欢的功能,它在POST时将SQL提交到数据库,并使用GET检索产品ID和产品类别,因此点击之后它会刷新,链接显示为:

"/index.php?id=106&category=Entertainment"

我一直在关注AJAX并想出如何使用它将SQL提交到数据库而无需刷新,但是当我需要提交GET变量时,我无法提交它。我想知道是否有人对此有所了解,因为我一直在尝试所有事情并且没有成功。目前,此功能的代码如下所示:

的index.html:

<form class="form-horizontal" action="?id=' . $productData->getID() . '&category=' . $productData->getPcategory() . '" method="post">
           <button id="like" type="submit" name="like" value="like" class="btn btn-success" onclick="javascript:return like();"><i class="glyphicon glyphicon-thumbs-up"></i></button>

</form>

的index.php:

if (isset($_POST["like"])) {
    $productDataSet = new productDataSet();
    $productDataSet->addLike();
    $likeDislike = "Product has been added to your <b>likes</b>.";
}

AJAX功能(适用于我网站的其他无需GET变量的区域):

function like()
{
$.ajax({
    url: "index.php",
    context: document.body
    }).done(function() {

    });
    return false;
}

我知道我需要添加此代码,以便脚本能够在POST上读取GET变量,但我不知道要添加什么,我们将非常感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

通常这是一个非常简单的任务,你需要的只是配置一个事件处理程序,假设你使用jQuery(你看起来像是)以下应该为你的javascript做的事情:

$(document).on('click', 'a[data-ajax-submission]', function(e)
{
    var link = $(this);
    var action = link.attr('data-ajax-action');
    var id = link.attr('data-resource-id');

    if(action == undefined || id == undefined)
    {
        return;
    }

    e.preventDefault();

    $.ajax({
        url: yourUrl, // Will need to set, could also use a data attribute again
        type: 'POST',
        data: {
            action: action,
            id: id
        },
        dataType: 'json',
        context: document.body
    }).always(function(response)
    {
        // Do stuff here
    })
});

这将导致单击具有data-ajax-submission属性的任何元素来触发此事件。

然后我们从其他数据属性中获取一个动作和一个id,并将它们作为ajax请求中的POST数据发送到服务器,使用示例如下:

<a data-ajax-submission data-ajax-action="resource-like" data-resource-id="1">Like</a>

我使用了术语&#34;资源&#34;作为占位符,这可能是&#34;产品&#34; &#34;类别&#34;不管。

然后在PHP中,您可以像处理任何其他表单请求一样处理它:

if(isset($_POST['action']) && $_POST['action'] == 'resource-like')
{
    // Check for an ID & any other validation
    // Persist, do stuff, etc...

    die(json_encode(array(
         'success' => $success
    )));

}

这是一个灵活的解决方案,应该允许您执行多个任务,而无需进一步修改JavaScript方面。

值得注意的是,通常对于喜欢,不喜欢,投票等行为,您需要将投票限制为每位访问者一次,通常是通过设置Cookie来实现。

如果您有任何后续问题,请告诉我......

答案 1 :(得分:0)

我不确定我是否理解这个问题,但是如果你想同时提交GET和POST变量,你可以尝试这个肮脏的技巧:

$.post( "someFile.php?var1=value1&var2=value2", {
     var3 : value3 ,
     var4 : value4 })

在PHP中,请阅读:

$_GET['var1']
$_GET['var2']
$_POST['var3']
$_POST['var4']