santa
santa

Reputation: 12512

Validate if website exists with AJAX

I'm trying to check if a website exists with an ajax call, but I'm not sure I am getting it right. On my page I grab a URL on click

$("#go").click(function() {
    var url = $("#url").val();
    $.ajax({
        type: "POST",
        url: "/ajax.php",
        data: "url="+url,
        success: function(){
          $("#start").remove();
        },      
        error: function(){
        alert("Bad URL");
        }
    });     
});

a=And then check on ajax.php

$url = $_POST['url'];

ini_set("default_socket_timeout","05");
set_time_limit(5);
$f=fopen($url,"r");
$r=fread($f,1000);
fclose($f);
if(strlen($r)>1) {
    return true;
} else {
    return false;
}

It seems I am getting SUCCESS no matter what... What am I missing?

Upvotes: 0

Views: 210

Answers (3)

Yang
Yang

Reputation: 8701

It seems I am getting SUCCESS no matter what... What am I missing?

This is extremely pretty straightforward.

Because of this reasons:

// You have no idea what server respond is.
// that is you can't parse that respond
success: function(){
   $("#start").remove();
}

Which should be

success: function(respond){

   //you don't have to return TRUE in your php
   //you have to echo this one instead
   if ( respond == '1'){
     $("#start").remove();
   } else {
     //handle non-true if you need so
   }
}

In php replace this:

if(strlen($r)>1) {
    return true;
} else {
    return false;
}

to

if(strlen($r)>1) {
    print true; //by the way, TRUE is a constant and it equals to == 1 (not ===)
}

Oh yeah, also don't forget to fix this as well:

data: "url="+url,

to data : {"url" : url}

Upvotes: 1

Nemoden
Nemoden

Reputation: 9056

Success callback is called whenever server-side script returned an answer (there were no connectivity errors or server-side errors). Is this answering your question?

See the difference:

$("#go").click(function() {
    var url = $("#url").val(),
        ajax_data = {url: url};
    $.post({
        "/ajax.php?cb=?",
        ajax_data,
        function(response){
          if (response.status) {
            // URL exists
          }
          else {
            // URL not exists
          }
          $("#start").remove();
        },      
        'json'
    });     
});

php back-end:

printf('%s(%s)', $_GET['cb'], json_encode(array('status' => (bool)$url_exists)));

Upvotes: 0

VVV
VVV

Reputation: 7593

As Nemoden said, you get a success message even if it returns false. You need to check the data returned and then remove the element.

for example

$("#go").click(function() {
    var url = $("#url").val();
    $.ajax({
        type: "POST",
        url: "/ajax.php",
        data: "url="+url,
        success: function(response){
          if (response == 'whatever you are returning') {
              $("#start").remove();
          }
        },      
        error: function(){
        alert("Bad URL");
        }
    });     
});

Upvotes: 1

Related Questions