Hi all I have a (probably) simple problem but I just can’t figure out why it’s not working.
The code below should be fairly easy to follow:
<?php
require('../db.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Website Checker</title>
<link href="style.css" rel="stylesheet" type="text/css" media="screen" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.simpletip-1.3.1.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#check').click(function(){
$('.http-status').html('<img src="images/spinner.gif"/>').fadeOut('slow').fadeIn('slow');
$('#site-list li.websites').each(function()
{
//var newurl = $(this).find('span.url a').attr('href');
var newurl = $(this).find('span.url').html();
$.ajax(
{
type: "POST",
url: "process.php",
data: ({"a":newurl}),
cache: false,
success: function(message)
{
$(this).find('span.http-status').html(message);
} //End AJAX return
}); //End AJAX call
}); //End li each
}); //End Check
$('#check').click();
});
</script>
<ul id="site-list" class="list">
<li class="title">
<span class="id"></span>
<span class="name">Title</span>
<span class="url">URL</span>
<span class="status">HTTP Status</span>
</li>
<?php
// some PHP to fetch all the gig entries from the shows table
$sql = "SELECT * FROM `check`";
$query = mysql_query($sql) or die(mysql_error());
// a loop to place all the values in the appropriate table cells
while ($row = mysql_fetch_array($query)){
//begin the loop...
$id=$row['id'];
$name=$row['name'];
$url=$row['url'];
?>
<li class="websites">
<span class="id"><?php echo $id; ?></span>
<span class="name"><?php echo $name; ?></span>
<span class="url"><?php echo $url; ?></span>
<span class="status http-status"></span>
</li>
<?php
}
?>
</ul>
<br />
<a href="#" id="check" class="button">Check Now</a>
This basically pulls site data from a db and presents it to the user and what I am trying to do is when you click the button for the http code of each site to be checked and displayed (and also run upon the page first being loaded)
This seems to work fine – the correct data is sent and recieved but then after that the spinner is STILL there!
link: http://www.4playtheband.co.uk/check/
process.php (if it helps):
<?php
require('../db.php');
$url= NULL;
if(isset($_POST['a'])) { $url = mysql_real_escape_string($_POST['a']); }
function Visit($url)
{
$agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";$ch=curl_init();
curl_setopt ($ch, CURLOPT_URL,$url );
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch,CURLOPT_VERBOSE,false);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$page=curl_exec($ch);
//echo curl_error($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpcode>=200 && $httpcode<300)
{
echo '<span class="up">'.$httpcode.'<span class="icon"><img src="images/info.png" alt="website is up"/></span></span>'; exit;
}
else
{
$httpcode=404;
$date = date("l, j \of F Y \@ H:i");
$to = "someone@domain.com";
$subject = "Urgent: $url is down";
$message = "Hello,\n\nIt appears that on our latest check of $url on $date that the site was down.\n\nRegards,\nWeb Checker";
$headers = 'From: noreply@webchecker.co.uk' . "\r\n" .
'Reply-To: noreply@webchecker.co.uk' . "\r\n";
mail($to, $subject, $message, $headers);
echo '<span class="down">'.$httpcode.'<span class="icon"><img src="images/info.png" alt="website is down"/></span></span>'; exit;
}
}
if(!empty($url)){ Visit($url); exit; }
?>
You should refer to
.http-statuselement within eachliin the success callback. Since you are makingajaxcalls in a loop we need to store eachliobject into local variable and create a closure by calling a method which will set the status message. Try this