2015-06-30 2 views
0

Я пытаюсь добавить текст загрузки, который будет отображаться, пока функция AJAX выполняется уже давно, и все мои попытки (включая использование ajaxStart и ajaxStop, между прочим) не работают вообще. Любая помощь приветствуется!Добавление загружаемого текста во время выполнения функции AJAX

Here - это веб-страница, на которой находится данный сценарий, если вы хотите увидеть его в действии. Способ, которым он работает, заключается в том, что вы вводите URL-адрес, и функция будет захватывать метатеги этого URL-адреса.

Между тем, вот соответствующий HTML, JavaScript и PHP:

HTML

<!DOCTYPE html> 
    <html> 
     <head> 
      <title>Keywords Grabber</title> 

      <script src="ajax.js"></script> 
      <script> 
       function display(content) { 
        document.getElementById("displaydiv").innerHTML = content; 
       } 
       window.onload = function() { 
        document.getElementById("btn1").onclick = function() { 
         var url = document.getElementById("txt1").value; 
         doAjax("metatags.php", "url=" + url, "display", "post", 0); 
        } 
       } 
      </script> 


     </head> 
     <body> 
      http://<input type="text" id="txt1" value="" /> 
      <input type="button" id="btn1" value="Get Keywords" /> 
      <h3>Keywords Received:</h3> 
      <div id="displaydiv"></div> 



     </body> 
    </html> 

JavaScript

function getXMLHttpRequest() { 
    try { 
     try { 
      return new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     catch(e) { 
      return new ActiveXObject("Msml2.XMLHTTP"); 
     } 
    } 
    catch(e) { 
     return new XMLHttpRequest(); 
    } 
} 
function doAjax(url, query, callback, reqtype, getxml) { 
    var myreq = getXMLHttpRequest(); 
    myreq.onreadystatechange = function() { 
     if (myreq.readyState == 4) { 
      if (myreq.status == 200) { 
       var item = myreq.responseText; 
       if (getxml == 1) item = myreq.responseXML; 
       eval(callback + '(item)'); 
     } 
    } 
} 
if (reqtype.toUpperCase() == "POST") { 
    requestPOST(url, query, myreq); 
    } else { 
     requestGET(url, query, myreq); 
    } 
    } 

function requestGET(url, query, req) { 
    var myRandom = parseInt(Math.random()*99999999); 
    if (query == '') { 
     var callUrl = url + '?rand=' + myRandom; 
    } else { 
     var callUrl = url + '?' + query + '&rand=' + myRandom; 
    } 
    req.open("GET", callUrl, true); 
    req.send(null); 
} 
function requestPOST(url, query, req) { 
    req.open("POST", url, true); 
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    req.send(query); 
} 

PHP

<?php 
$tags = @get_meta_tags('http://'.$_REQUEST['url']); 
$result = $tags['keywords']; 
if(strlen($result) > 0) { 
    echo $result; 
} else { 
    echo "No keywords metatag is available."; 
} 
?> 
+0

лол, слишком поздно, чтобы прочитать все это. В любом случае, все, что вы делаете, имеет скрытое сообщение загрузки, а затем показывать его непосредственно перед вызовом ajax, а затем для обратного вызова функции ajax скрыть загрузчик. это не так уж сложно. Я бы рассмотрел использование jQuery $ .post (url, {data}, function() {}); – ArtisticPhoenix

ответ

1

что-то вроде этого

<div id="loading" style="display:none;">loading</div> 

Javascript

$('#loading').css('display', 'block'); 
$.post(url, {}, function(data){ 
     $('#loading').css('display', 'none'); 
}); 
+0

Эй, там! Я чувствую себя абсолютным идиотом, чтобы сказать это, но как мне реализовать часть JavaScript того, что вы отправили в мой скрипт? Я чувствую, что это такой основной вопрос, который я задал, но сейчас я просто смущен. Однако, спасибо! – LittleProgrammer

+0

http://jquery.com/ - это javascript framework, и делает жизнь намного проще – ArtisticPhoenix

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