PHP函数中的AJAX正在应用于函数的每个下一个实例

Here I have an .ajax function within a PHP function, like this:

function phpFunction($ID) {
    print "<script>
            $('.uparrow').click(function(){
                request = $.ajax({

etc... the rest isn't important.

Anyway, the class .uparrow is an html element that runs this .ajax function when clicked. The other thing you should know is that this function: phpFunction() is called a few times in the document, like this:

phpFunction(1)
phpFunction(2)
phpFunction(3)

However, the problem is that when I load phpFunction(), and I click on the .uparrow element, the .ajax call is made on behalf of each instance of phpFunction() that follows the one whose element I clicked on.

So if I clicked on the .uparrow of phpFunction(1), I would also be virtually clicking on the .uparrows of phpFunction(2) and phpFunction(3). Essentially, I need .uparrow to just be a local class that only applies to the instance of phpFunction() that is currently being called.

The only solution I could think of is to replace .uparrow's class name with something unique to each call of this function. The only difference between each instance of phpFunction() is their input $ID and I was thinking I could redefine .uparrow as:

class = '$ID.uparrow'

or

class = $ID + 'uparrow'

But that doesn't work. So how do I make sure that when I click on .uparrow within phpFunction(1), that the .ajax function only gets called that one time?

This is pretty confusing to explain and probably to understand, so please tell me if there's something that needs elaboration.

Let's say you have a list of elements, and when you click one of them, you want to do an ajax call.

<a href="#" class="uparrow" data-id="<?= $id1 ?>">click me</a>
<a href="#" class="uparrow" data-id="<?= $id1 ?>">click me</a>
<script>
$(function(){ //on DOM ready
   $('.uparrow').on('click', function(){
      //do ajax call
      $.ajax({
          url: 'url here'
          type: 'post|get'
          data: $(this).attr('data-id'), // you only send the ID of the clicked element
          ... callbacks, etc
      })
   });
})
</script>

Now you only have a function that makes an ajax call and takes the parameter to send from the element you clicked.

I hope this is what you wanted to achieve

Try something like this

$('[class="uparrow"]').click( function () {

  var request = $.ajax({ 
                 // Your ajax call
               });

});

this will execute ajax on the clicked element with .uparrow class

HTML

<a class="uparrow" href="#" data-ajax="I'm the first element">Click Me</a>
<a class="uparrow" href="#" data-ajax="I'm the second element">Click Me</a>
<a class="uparrow" href="#" data-ajax="I'm the third element">Click Me</a>

JS:

$('[class="uparrow"]').click(function () {

    var currentAjax = $(this).data('ajax')
    console.log(currentAjax);

});

And the DEMO

Do not call your php function multiple times. Just one time is sufficient.

Modify the markup of your .uparrow element to include the id like so:

<a class="uparrow" data-id="<?php echo $id; ?>" href="#">TextM/a>

Then re-write your php function like so:

function phpFunction() { /* no need to pass the ID */ ?> 
<script>
$(function(){
   $(document).on('click', '.uparrow', function(){
      $.ajax({
          url: 'URL',
          type: 'POST'.
          data: $(this).attr('data-id')
      })
   });
})
</script>
<?php } ?>

Call your phpFunction like so: phpFunction();

UPDATE

<!doctype html>
    <html>
        <head>
            <title>trop</title>
            <meta charset='utf-8'>
            <link rel='stylesheet' href='css/postStyle.css' />
            <link href='http://fonts.googleapis.com/css?family=Exo+2:400,300,200|Homenaje&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
            <link rel='shortcut icon' href='http://icons.iconarchive.com/icons/visualpharm/icons8-metro-style/256/Music-Note-icon.png'>
            <script src='../jquery.js'></script>
            <script type='text/javascript' src='../script.js'></script>
        </head>
    <body>
    <?php
    $ids = array(1,2,3); // IDs of the posts you want
    $result = mysql_query("SELECT * FROM all_posts WHERE ID IN($ids)"); 
    while ($data = mysql_fetch_array($result)){ 
    ?>
        <div class='post' style='width:470px'>
            <h3><?php echo $data['Title']; ?></h3>
            <div class='date'><?php echo $data['DateTime']; ?></div>
            <iframe width='470' height='300' src='http://www.youtube.com/embed/WF34N4gJAKE' frameborder='0' allowfullscreen></iframe>
            <p><?php echo $data['Body']; ?></p>
            <div class='postmeta1'> 
                <p><a href='<?php echo $data['DownloadLink']; ?>' target='_blank'>DOWNLOAD</a></p>
            </div>
            <div class='verticalLine' style='height:39px'></div>
            <div class='postmeta2'> 
                <p class='uparrow' data-id="<?php echo $data['id']; ?>">&#x25B2;</p>
                <div class='votes'>3</div>
                <p class='downarrow'>&#x25BC;</p>
            </div>
            <div class='verticalLine' style='height:39px'></div>
            <div class='postmeta3'> 
                <div class='tags'>
                    <p><?php echo $data['Tags']; ?></p>
                </div>
            </div>
        </div>
    <?php } ?>

    <script>
        var request;
        $('.uparrow').click(function(){
            request = $.ajax({
                url: 'votesHandler.php',
                type: 'post',
                data: { add : '1', ID : $(this).attr('data-id') }
                });
                request.done(function (response, textStatus, jqXHR){
                    alert('Voted!');
                });
                request.fail(function (jqXHR, textStatus, errorThrown){
                    alert(
                        'Oops, something went wrong'
                    );
                });
                request.always(function () {
                    alert('Done.');
                });
        });
    </script>
</body>
</html>