【问题标题】:How to get element id into PHP variable如何将元素 id 放入 PHP 变量中
【发布时间】:2011-03-02 03:53:50
【问题描述】:

是否可以将元素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 是一个非常强大的工具,我想找到一种将它的强大功能与服务器端代码相结合的方法。

谢谢。

【问题讨论】:

  • 你应该修复&lt;span id=1="1"
  • id=1="2" 是错字吗?不应该是id="2"吗?
  • 糟糕,很好。剪切粘贴错字。
  • 如果需要通过id来引用,id本身不能以数字开头。尝试使用 id="item_1"id="item_2" 之类的前缀。
  • @RDL 从技术上讲它不能以数字开头,但这仍然适用于 JS。它只提出了 CSS 的问题。但可能无法验证:jsfiddle.net/kZbYU/2

标签: php mysql


【解决方案1】:

这就像你的问题: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>

您可以在此处自定义查询和响应以及您希望对响应执行的操作。

【讨论】:

    【解决方案2】:

    我认为你有两个“好”的选择。

    第一种是每次排序发生变化时发起一个post请求。您可能正在使用jQuery UI sortable 更改排序。大多数支持拖放的库还允许您在初始化函数中简单地放置一个事件回调。

    在这个偶数回调中,您将启动 $.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(',');
    

    【讨论】:

    • 是的,我遇到了可排序插件——它很酷。但就我而言,我不需要更改 div 的顺序。单击该元素时,我需要发布该元素的ID。我也没有页面上的表格。我希望使用表单来规避,因为我可以使用 jQuery 获取 ID。
    • 如果就这么简单,我认为您的方法没有问题。您具体遇到了什么问题?
    【解决方案3】:

    你说的很对,按照这些思路的东西会起作用。这是一个例子:

    (顺便说一句,使用$.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>
    

    【讨论】:

    • 哦,你的意思是我可以使用 html(data) 创建一个新变量?我对这个前后端交互有点迷茫……
    【解决方案4】:

    您的方法对我来说看起来非常好,但是 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 注入你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      相关资源
      最近更新 更多