目前我在我的网站上有一个喜欢/不喜欢的功能,它在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变量,但我不知道要添加什么,我们将非常感谢任何帮助。
感谢。
答案 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']