我只是通过构建自己的基于IP的Like系统来扰乱简单的PHP和Java。
尝试寻找解决方案,但到目前为止没有成功。
HTML在php EOT中的while循环中生成表单,显然每个表单都有唯一的id。共有25张带有"点赞"按钮的表格。这些表单在引导模式中。因此,因为它处于模态中,我不希望它刷新页面并重置我的"显示更多"列表。我正在尝试让所有表单都能够使用javascript按项目提交Like by id。下面的代码。
有什么建议或不同的方法吗?
HTML-PHP While循环(Modals中的表单):
<p id="result{$itemID}"></p>
<form enctype="multipart/form-data"
action="{$postLike}"
id="myform{$itemID}"
name="{$itemID}"
method="post">
<input type="hidden"
name="itemids"
value="{$itemID}">
<input type="hidden"
name="ips"
value="{$ips}">
<button id="submit-btn{$itemID}"
class="btn btn-{$optionLikeColor}" {$optionLikeDisabled}>
<span class="glyphicon glyphicon-thumbs-up glyphr"
aria-hidden="true">
</span> {$optionILikeText} {$likes}
</button>
</form>
PHP:
<?php
require 'init.php';
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['itemids'])){
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
$itemsid = mysqli_real_escape_string($link, $_POST['itemids']);
$itemsip = $_SERVER['REMOTE_ADDR'];
if ($result = mysqli_query($link, "SElECT * FROM likes WHERE itemID='$itemsid' AND ip='$itemsip'")) {
$row_cnt = mysqli_num_rows($result);
if($row_cnt > 0){
echo 'You've have already liked this item.';
} else {
$sql = "INSERT INTO likes (itemID, ip) VALUES ('$itemsid', '$itemsip')";
if(mysqli_query($link, $sql)){
echo 'Thank you!';
} else {
echo 'Something went wrong, try again later!';
}
}
}
} else {
echo 'Something went wrong, try again later!';
}
mysqli_close($link);
?>
Javascript正在工作,但仅适用于第一种形式:因此,我猜我需要将form/id变量传递到:$('#myform')、$('#1insert')、$[#myform:input')和$('#result')
$('#myform').submit(function(){
return false;
});
$('#insert').click(function(){
$.post(
$('#myform').attr('action'),
$('#myform :input').serializeArray(),
function(result){
$('#result').html(result);
}
);
});
Javascript概念显然不起作用:p建议?
$("[id^='myform']").submit(function(){
var ID = $(this).attr('name');
return false;
});
$(document).ready(function(){
$(document).on('click','#submit-btn'+ID,function(){
$.post(
$('#myform'+ID).attr('action'),
$('#myform${ID} :input').serializeArray(),
function(result){ $('#result'+ID).html(result); }
);
});
});
为所有表单指定相同的类,或者通过某种方式唯一选择这些表单。对于所有这些元素,您不需要唯一的id。
然后:
$(".myFormClass").on("submit", function () {
var $f = $(this); // the form that got submitted
$.post(
$f.attr('action'),
$f.find('input').serializeArray(),
function(result){
// not sure where you wanted the result.
// The point is that you should select it relative to the form $f that you already know.
$f.find('span').html(result);
}
);
});
工作起来很有魅力!谢谢
$('.myFormClass').submit(function(){
return false;
});
$('.myFormClass').click(function() {
var $f = $(this);
$.post(
$f.attr('action'),
$f.find('input').serializeArray(),
function(result){
$f.find('#submit-btn').remove(),
$f.find('#result').html(result);
}
);
});