1

First time for me here.

I am using PHP, MySQL, JavaScript and running JQUERY and AJAX functions.

I have an anchor link that runs a function.

The function emptys a DIV tag and then fills/displays (SELECT query) a table of rows in the DIV with a is null where clause. Each row has a select box where the NULL data column would go. The data in the select box comes from a different table.

When the select box changes it immediately runs the ajax to UPDATE the table row with the new data in the select box.

When you click the link to run the function again (empty, select query and display based on null column) the row that was just updated to the DB shows up again based on the is null clause. Checking the DB table at this point shows that it is in fact not null and was UPDATEd properly the first go around.

The page is never refreshed during this process and never has to be. If I do refresh it shows the proper data without the BUG.

All your thoughts are greatly appreciated.

matt

function closeItemsBtn() { // called by a click function of a standard link/button
  $('#CloseItems').empty(); // remove all html from the DIV
  var newAppend = '';
  <?
  //[... connect to db ...]
  // select info from 2 different tables so it can be used in different locations if necessary
  // where the row has not been reviewed and therefore is null
  $query = "select * from nearmiss where reviewedId is null order by submitDate desc";
  $result = $db->query($query) or die($db->error);
  $query2 = "select * from hazardid where reviewedId is null order by submitDate desc";
  $result2 = $db->query($query2) or die($db->error);
  $num_rows = $result->num_rows;
  $num_rows2 = $result2->num_rows;
  // create html for the DIV tag. Creates a table in a DIV that collapses by clicking aCloseList.
  // each row is in tbody so it can be striped by a all purpose striping function
  // this part is the table header and opening div tags and link
  $newAppend = "<p id=\"closeList\"><a href=\"#\" id=\"aCloseList\">Show/Hide</a> {$num_rows} Near Misses requiring attention.</p><div id=\"closenearmiss\" style=\"display:none;\"><table class=\"closenearmisstable\"><tbody><tr><td>Date Submitted</td><td>Submitted By</td><td>Location</td><td>Reviewed By</td></tr><tr><td rowspan=\"2\">Type</td><td colspan=\"3\">Description / Observation</td></tr><tr><td colspan=\"3\">Action / Reinforcement</td></tr></tbody>";
  // update various foreign key information from other tables
  for ($i=0;$i<$num_rows;$i++) {
$row = $result->fetch_assoc();
$query3 = "select location from locations where locationId='{$row['locationId']}'";
$result3 = $db->query($query3);
$location = $result3->fetch_assoc();
$query3 = "select name from employees where employeeId='{$row['employeeId']}'";
$result3 = $db->query($query3);
$name = $result3->fetch_assoc();
      // here is the table itself with the select tag in the null column name=reviewed
$newAppend .= "<tbody><tr><td>{$row['submitDate']}</td><td>{$name['name']}</td><td>{$location['location']}</td><td><form name=\"nearmissreview\" action=\"\" method=\"\"><input type=\"hidden\" name=\"docId\" value=\"{$row['nearmissId']}\"><input type=\"hidden\" name=\"type\" value=\"nearmiss\"><select name=\"reviewed\"><option>Choose name to sign off</option></select></form></td></tr><tr><td rowspan=\"2\">Near Miss</td><td colspan=\"3\">{$row['description']}</td></tr><tr><td colspan=\"3\">{$row['action']}</td></tr></tbody>";
  }
$newAppend .= "</table></div>";

// this is the beginning of the second table same structure as first with collapsing but
      // different data
$newAppend .= "<p id=\"closeList\"><a href=\"#\" id=\"aCloseList\">Show/Hide</a> {$num_rows2} Hazard IDs requiring attention.</p><div id=\"closehazardid\" style=\"display:none;\"><table class=\"closehazardidtable\"><tbody><tr><td>Date Submitted</td><td>Submitted By</td><td>Location</td><td>Reviewed By</td></tr><tr><td rowspan=\"2\">Type</td><td colspan=\"3\">Description / Observation</td></tr><tr><td colspan=\"3\">Action / Reinforcement</td></tr></tbody>";
  for ($i=0;$i<$num_rows2;$i++) {
$row = $result2->fetch_assoc();
$query3 = "select location from locations where locationId='{$row['locationId']}'";
$result3 = $db->query($query3);
$location = $result3->fetch_assoc();
$query3 = "select name from employees where employeeId='{$row['employeeId']}'";
$result3 = $db->query($query3);
$name = $result3->fetch_assoc();
$newAppend .= "<tbody><tr><td>{$row['submitDate']}</td><td>{$name['name']}</td><td>{$location['location']}</td><td><form name=\"hazardidreview\" action=\"\" method=\"\"><input type=\"hidden\" name=\"docId\" value=\"{$row['hazardidId']}\"><input type=\"hidden\" name=\"type\" value=\"hazardid\"><select name=\"reviewed\"><option>Choose name to sign off</option></select></form></td></tr><tr><td rowspan=\"2\">Hazard ID</td><td colspan=\"3\">{$row['description']}</td></tr><tr><td colspan=\"3\">{$row['action']}</td></tr></tbody>";
   }
$newAppend .= "</table></div>";
echo "newAppend='{$newAppend}';";
$result->free();
$result2->free();
$result3->free();
$db->close();
?>
// put HTML of $newAppend php in the DIV
$('#CloseItems').append(newAppend);
// fill the select box with a variable set somewhere else in the code not displayed here
$('#CloseItems select[name=reviewed]').append(newAppendE);
stripePointsTable('.closenearmisstable tbody');
stripePointsTable('.closehazardidtable tbody');
// close list click options
$('#closeList > a').each(function() {
$(this).click(function() {
    if ($(this).parent().next().css('display')=='none') {
        $(this).parent().next().slideDown('slow');
    } else {
        $(this).parent().next().slideUp('fast');
    }


});
});
// select tag change function that calls ajax and displays a message in a DIV called header
$('#closenearmiss select').change(function() {
    function processDataClose(data, success) {
        if (success) {
            $('#header').prepend(data+"<br />");
            closeItemsBtn();
        } else {
            $('#header').prepend(data+"<br />");
        }
    }
    var formData = $(this).parent().serialize();
    $.post('processreviewsign.php',formData,processDataClose);
});
hakre
  • 193,403
  • 52
  • 435
  • 836
matting
  • 29
  • 5
  • 2
    This is almost certainly a caching issue in some way. Is it possible to provide some minimalist code snippets for us to better understand how the page is functioning? – Nicholas Dec 16 '11 at 15:51
  • could you post some of your code please. – Ben English Dec 16 '11 at 15:52
  • @NicholasBostaph I have changed headers to eliminate caching of the page to no avail. – matting Dec 16 '11 at 16:09
  • I'm very green with JQuery, and was hoping the issue would be in an area I'm more familiar with. But I tend to agree with Kato; based on the code and the description of the problem it seems likely JQuery is caching data (whether it's supposed to or not). I would concentrate efforts there. Good luck, and sorry I couldn't be of more help. – Nicholas Dec 16 '11 at 18:16

1 Answers1

0

jQuery caches your ajax calls. This is likely why you see the correct result when you refresh the page, but not in subsequent calls via ajax.

Try setting cache: false in your ajax call

Mosty Mostacho
  • 42,742
  • 16
  • 96
  • 123
Kato
  • 40,352
  • 6
  • 119
  • 149