开发者

How to get element id into PHP variable

Is it possible to get an element id into a PHP variable?

Let's say I have a number of element with IDs:

<span id="1" class="myElement"></span>
<span id="2" class="myElement"></span>

How do I get this into a PHP variable in order to submit a query. I suppose I would have to resubmit the page, which is OK. I would like to use POST. Can I do something like:

<script language="JavaScript">
$(document).ready(function(){
    $(".myElement").click(function() {
        $.post("'.$_SERVER['REQUEST_URI'].'", { id: $(this).attr("id") });
    });
});
</script>

I need to pass $(this).attr('id') into $newID in order to run

SELECT * from t1 WHERE id = $newID

jQuery is a very powerful tool and I would like to figure out a way to combine its power with server-side code.

Thanks.开发者_如何转开发


This is like your question: ajax post with jQuery

If you want this all in one file (posting to active file) here is what you would need in general:

<?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>

From here you can customize the queries and response and what you would like to do with the response.


You have two "good" choices in my mind.

The first is to initiate a post request every time the ordering changes. You might be changing the ordering using jQuery UI sortable. Most libraries that support dragging and dropping also allow you to put an event callback on the drop simply within the initialization function.

In this even callback, you'd initiate the $.post as you have written it in your code (although I would urge you to look up the actual documentation on the matter to make sure you're POSTing to the correct location).

The second strategy is to piggyback on a form submission action. If you're using the jQuery Form Plugin to handle your form submissions, they allow you to indicate a before serialize callback where you can simply add into your form a field that specifies the ordering of the elements.

In both cases, you'd need to write your own function that actually serializes the element IDs. Something like the following would do just fine (totally untested; may contain syntax errors):

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(',');


You're quite right, something along those lines would work. Here's an example:

(btw, using $.post or $.get doesn't resubmit the page but sends an AJAX request that can call a callback function once the server returns, which is pretty neat)

<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>


Your approach looks perfectly fine to me, but jQuery does not have a $_SERVER variable like PHP does. The url you would want to provide would be window.location (I believe an empty string will also work, or you can just specify the url on your own). You seem to be sending the ID just fine, though, so this will work.

If you want the page to react to this change, you can add a callback function to $.post(). You can do a variety of things.

$.post(window.location, {id: this.id}, function (data) {
   //one
   location.reload();
   //two
   $("#responsedata").html(data);
   //three
   $("#responsedata").load("affected_page.php #output");
});

I think number 2 is the most elegent. It does not require a page reload. Have your server side php script echo whatever data you want back (json, html, whatever), and it will be put in data above for jQuery to handle however you wish.

By the way, on the server side running the query, don't forget to sanitize the $id and put it in quotes. You don't want someone SQL Injecting you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜