2010-10-13 3 views
0

Я определяю ссылку < a href = "http://www.example.com" > Здравствуйте, </a >. Когда я нажимаю эту ссылку, javascript должен проверить, существует ли ссылка/valid.if true, страница должна быть загружена или страница должна быть перенаправлена ​​на другую страницу. Я использую javascript ajax для проверки страницы существует/not.i использую условие xmlhttp.status == 200. Но это не работает. код:Отменить загрузку страницы в javascript

function check(url){ 
    xmlHttp.open("GET", url, true); 
    xmlHttp.onreadystatechange=function(){ 

     if(xmlHttp.readyState==4){ 
      if (xmlHttp.status==200) 
      { 
       alert("Page Available"); 
      } 
      else 
      { 
       window.location.href= "http://www.hello.com"; 
      } 
     } 
    } 

    xmlHttp.send(null); 
} 
</script> 

</head> 
<body> 
<a href="http://www.example.com" onclick="check(this)">Click this Link</a> 

здесь xmlHttp.status == 200 не работает. Кто-нибудь может мне помочь?

+0

Определить «не работает». Это оператор равенства, я сильно подозреваю, что он работает правильно. Вы имеете в виду, что статус не 200, когда вы ожидаете, что это будет? Или что сравнение никогда не называется? Или что действительно есть проблема с реализацией вашего JS-движка? –

+2

Вы не можете сделать запрос перекрестного домена на стороне клиента. http://stackoverflow.com/questions/466737/why-is-cross-domain-ajax-a-security-concern – BrunoLM

+0

В совершенно ином случае, если вас интересует только код состояния запроса, вы должны сделайте запрос 'HEAD' вместо' GET'. Гораздо более легкий вес (т. Е. Быстрее и дешевле и «лучше») и содержит всю необходимую информацию. –

ответ

0

Браузеры не позволят вам сделать перекрестный домен .

Подробнее here, here и here.

0
  1. Должен быть из того же домена или домен должен использовать CORS для сафари 4 и Fx 3.5+
  2. вам нужно вернуть ложны на щелчке
  3. вам нужно использовать url.href
  4. вы должны предупредить, прежде чем перенаправить

function check(link){ /* ONLY works from same domain OR if the target implemented CORS! */

xmlHttp.open("GET", link.href, true); 

    xmlHttp.onreadystatechange=function(){ 

    if(xmlHttp.readyState==4){ 
     if (xmlHttp.status==200) 
     { 
      alert("Page Available"); 
     } 
     else 
     { 
      window.location.href= "http://www.hello.com"; 
     } 
    } 
} 

xmlHttp.send(null); 
return false; // imperative 
} 
</script> 

</head> 
<body> 
<a href="http://www.example.com" onclick="return check(this)">Click this Link</a> 
+0

И я попытался опубликовать какой-то скрипт и SO puked во всем этом :( – mplungjan

+0

@mplugjan: Отступьте это правильно, так что SO знает, что это код. – poke

+0

i try return false; – anish

0

Ваш атрибут OnClick должен содержать:

check(this.href); 
+0

, но я получаю URL-адрес в funtion.i с предупреждением – anish

+0

Вы видели URL-адрес напечатано, но это потому, что метод 'toString()' '' '' 'возвращает URL-адрес, а не потому, что он * является * URL-адресом – andrewmu

2

Хорошо, несколько точек:

  1. onclick="check(this)" не передает URL в функции check, но ссылка на объект ссылки. Поэтому, если вы хотите передать URL-адрес, вам необходимо указать атрибут href.
  2. Вы не должны устанавливать window.location.href, если хотите вывести что-то еще затем. Установка текущего местоположения может изменить браузер напрямую, поэтому alert, вероятно, не изменится.
  3. Почему if, где вы изменяете местоположение в google каждый раз?
  4. Вы можете только отменить обработку ссылки, нажав, вернув false в обработчик события.
  5. AJAX звонки, как указано в первом параметре, асинхронный. Но по мере того, как вы прекращаете загрузку страницы (нажав на ссылку), вызов AJAX прерывается.
  6. Вы не можете вернуть false из обработчика события AJAX (onreadystatechange), чтобы остановить обработку ссылки. К тому времени, когда вы туда доберетесь, ссылка уже обработана.
  7. Это то, что вы пытаетесь, на самом деле не очень хорошо. Пользователь должен проверить, существует ли страница или нет. Было бы очень неправильно перенаправить его на какую-либо другую страницу (здесь: google) только потому, что ссылка не работает; по крайней мере, я был бы очень смущен. Также, проверяя, что с AJAX вы заставляете пользователя загружать страницу дважды, что тоже плохо.
+0

onclick =" check (this) ". Он передает URL-адрес – anish

+0

@anish: Нет, он проходит ссылка на элемент DOM.Она просто равна URL-адресу при передаче в виде строки. Проверьте с помощью 'typeof (url)' в функции 'check'. – poke

0

Вы не передаёте URL. Вы передаете элемент DOM ссылки. Вам нужно использовать url.href или в jQuery вам нужно использовать $ (this) .attr ('href').

Также JavaScript не препятствует соблюдению ссылки. Вам нужно, чтобы функция возвращала false и не имела ошибок до ее выполнения, или вы можете использовать jQuery и event.preventDefault().

Наконец, даже если вы сделали все из-за той же политики происхождения, она будет работать только для ссылок в том же домене, в котором вы находитесь. Here is a link to a jQuery version of your code.

0

Хорошо, вы почти у цели. До сих пор много полезных комментариев. Но лучше перенаправить с сервера не от клиента. Я лично передал бы параметр функции на ваш сервер (URL-адрес сервера вашего сервера) (захват href с помощью jQuery) на функцию на вашем сервере, а затем использовал этот переданный url для выполнения (головной) проверки и перенаправления их через сервер если он существует. Если сайт не существует, то не перенаправлять и просто отправлять JSON обратно клиенту и сообщить им, что сайт не существует.

Смежные вопросы