是否可以将元素id
放入PHP
变量?
假设我有许多带ID的元素:
<span id="1" class="myElement"></span>
<span id="2" class="myElement"></span>
如何将此变为PHP
变量才能提交查询。我想我必须重新提交页面,这没关系。我想用POST。我可以这样做:
<script language="JavaScript">
$(document).ready(function(){
$(".myElement").click(function() {
$.post("'.$_SERVER['REQUEST_URI'].'", { id: $(this).attr("id") });
});
});
</script>
我需要将$(this).attr('id')
传递给$newID
才能运行
SELECT * from t1 WHERE id = $newID
jQuery
是一个非常强大的工具,我想找到一种方法将其功能与服务器端代码结合起来。
感谢。
答案 0 :(得分:3)
这就像您的问题:ajax post with jQuery
如果你想将这一切都放在一个文件中(发布到活动文件),这里你需要的是:
<?php
// Place this at the top of your file
if (isset($_POST['id'])) {
$newID = $_POST['id']; // You need to sanitize this before using in a query
// Perform some db queries, etc here
// Format a desired response (text, html, etc)
$response = 'Format a response here';
// This will return your formatted response to the $.post() call in jQuery
return print_r($response);
}
?>
<script type='text/javascript'>
$(document).ready(function() {
$('.myElement').click(function() {
$.post(location.href, { id: $(this).attr('id') }, function(response) {
// Inserts your chosen response into the page in 'response-content' DIV
$('#response-content').html(response); // Can also use .text(), .append(), etc
});
});
});
</script>
<span id="1" class="myElement"></span>
<span id="2" class="myElement"></span>
<div id='response-content'></div>
从这里,您可以自定义查询和响应以及您希望如何处理响应。
答案 1 :(得分:2)
在我看来,你有两个“好”的选择。
第一种是每次订单更改时发起一个帖子请求。您可能正在使用jQuery UI sortable更改排序。大多数支持拖放的库也允许您在初始化函数中将事件回调放在drop上。
在这个甚至回调中,你发起了$.post
,因为你已经在你的代码中写了它(尽管我会敦促你查找关于这个问题的实际文档,以确保你在帖子中发布正确的位置)。
第二个策略是捎带表单提交操作。如果您使用jQuery Form Plugin来处理表单提交,它们允许您指定序列化回调之前,您可以在表单中添加一个指定元素排序的字段。
在这两种情况下,您都需要编写自己的函数来实际序列化元素ID。像下面这样的东西会很好(完全未经测试;可能包含语法错误):
var order = [];
$('span.myElement').each(function(){
// N.B., "this" here is a DOM element, not a jQuery container
order.push(this.id);
});
return order.join(',');
答案 2 :(得分:1)
你是对的,沿着这些方向发挥作用。这是一个例子:
(顺便说一句,使用$.post
或$.get
不会重新提交页面,但会发送一个AJAX请求,一旦服务器返回就可以调用回调函数,这非常简洁。
<script language="JavaScript">
$(document).ready(function(){
$(".myElement").click(function() {
$.post(document.location, { id: $(this).attr("id") },
function (data) {
// say data will be some new HTML the server sends our way
// update some component on the page with contents representing the element with that new id
$('div#someContentSpace').html(data);
});
});
});
</script>
答案 3 :(得分:1)
你的方法看起来非常好,但是jQuery没有像PHP那样的$ _SERVER变量。您希望提供的网址为window.location
(我相信空字符串也可以使用,或者您可以自行指定网址)。你似乎正好发送了这个ID,所以这样可行。
如果您希望页面对此更改做出反应,可以向$.post()
添加回调函数。你可以做各种各样的事情。
$.post(window.location, {id: this.id}, function (data) {
//one
location.reload();
//two
$("#responsedata").html(data);
//three
$("#responsedata").load("affected_page.php #output");
});
我认为2号是最优秀的。它不需要重新加载页面。让你的服务器端php脚本回显你想要的任何数据(json,html,无论如何),它将放在data
上面,以便jQuery处理你想要的。
顺便说一下,在运行查询的服务器端,不要忘记清理$ id并将其放在引号中。你不希望有人SQL注入你。