jlrvpuma
jlrvpuma

Reputation: 271

How to know if url is available?

I have a link redirecting to an intranet direction:

<a href="http://10.2.68/name/">Go</a>

Only users in intranet can access, otherwise they get a 404 error. I want to know if the the url is valid before redirecting, this way users out of intranet won't get the 404 error but a message saying 'You don't have access'. How can I do this with jquery or javascript?.

EDIT: Well, thank you very much, but unfortunately any method does not work for me. Sorry, I didn't mention that website and intranet url are in differente domain. Finally I had to validate user IP in codebehind and write or not the intranet url.

Upvotes: 3

Views: 2078

Answers (5)

Jakub
Jakub

Reputation: 20475

You can use this jQuery plugin to make a head request to the remote file, if it comes back with something it is good (and you can display it for instance) otherwise don't show it

Plugin: http://binarykitten.me.uk/dev/jq-plugins/88-jquery-plugin-ajax-head-request.html

Upvotes: 1

Abdul Munim
Abdul Munim

Reputation: 19217

Assuming your anchor has an ID:

<a id="lnkGo" href="http://10.2.68/name/">Go</a>

And your jQuery code might look like this:

$("#lnkGo").bind("click", function() {
    var $that = $(this);
    $.ajax({
      url: $that.attr("href"),
      statusCode: {
        200: function() {
          window.location = $that.attr("href")
        },
        404: function () {
          alert("Sorry, page is unavailable...");
        }
      }
    });
    return false;
});

Also, please keep mind that this won't work on cross-domain issue. The url has to be same as the current domain.

Upvotes: 0

Kato
Kato

Reputation: 40582

The best answer would be to disable the link if it's inactive, before the user tries to click it (why make them try?).

jQuery(function($) { // make sure dom is ready

    $.ajax( {
        url: url,
        //dataType: 'JSONP', //might need this?
        complete: function(xhr) { // use complete so it fires on error OR success
           if( xhr.status == 200 || xhr.status == 304 ) {
               $('#link').addClass('valid');
           }
           else {
               $('#link').addClass('invalid').click(function() { return false; });
           }
        }
    });

});

But if you don't want the call because there are going to be thousands of users looking at the page every minute...

jQuery(function($) { // make sure dom is ready

    $('#link').click(function() {
        $.ajax( {
           url: url,
           //dataType: 'JSONP', //might need this?
           success: function() {
              window.location = url;
           },
           error: function() {
              // does this work with JSONP? be sure to check!
              window.alert('could not connect');
           }
        }
    });

});

Upvotes: 0

Rich Bradshaw
Rich Bradshaw

Reputation: 72975

You could make an ajax request first, something like:

$.ajax({
  url: "http://10.2.68/name/",
  context: document.body,
  success: function(){
       window.location = "http://10.2.68/name/";
  }
});

That could be run by binding to the click event on the link.

Not sure if it will work due to cross origin stuff, but might be a good place to start.

Upvotes: 3

Neo
Neo

Reputation: 2395

Perhaps use an htaccess file to detect the internal network instead?

Upvotes: 0

Related Questions