2013-04-19 2 views
-2

Я строю проект, который использует функцию, называемую Chat.fetch(); это асинхронная функция, которая вытягивает массив строк с сервера. Это функция ajax, которая для целей проекта уже определена, я просто должен правильно ее называть. Есть еще одна функция, которую мы называем Chat.display(), которая берет строку и отображает ее в пуленевой форме на консоли. Прямо сейчас это то, что у меня есть: Я получаю сообщение об ошибке, которое говорит, что не может прочитать длину свойства неопределенного. Итак, я догадываюсь, что lengthNength для superArray не определено? Цель состоит в том, чтобы создать эту функцию и использовать ее в качестве функции обратного вызова для Chat.fetch(). Вы, ребята, не знаете, почему я получаю эту ошибку .length? Я довольно смущен. Благодаря!Использование Ajax для отображения значений асинхронной функции

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <script src="http://chatbuilder.hackreactor.com/ChatBuilder.js"></script> 
    </head> 
    <body> 
    <script> 


    Chat.guide.start(); 


    <h2>Borken Chat</h2> 

    <input class="draft" type="text"/> <button class="send" disabled>send</button> 



    <ul class="messages"> 

     <script> 
    var list; 
    var superArray=[]; 
    darray=function(superArray){ 
     var y=superArray.length; 
     for(i=0;i<y;i++){ 
     Chat.display(x[i]); 
     } 
    } 
    Chat.fetch(darray(list)); 
    </script> 

    </ul> 

    </body> 

+2

Можете ли вы разместить код? Обычно значения возвращаются только в тексте ответа объекта XMLHttpRequest ... –

+0

Нам нужно узнать больше о '.fetch' или о приложении в целом. Если '.fetch' возвращает обещание (объект, который может иметь функцию' .done' или функцию '.then', или что-то подобное), вы можете связать его (' Chat.fetch(). Done (chatbox. update_messages); 'if not, а затем выяснить, есть ли место в' Чат', где вы можете зарегистрировать функцию, которая будет вызываться, когда возвращается '.fetch'. Это также поможет, если вы просто сбросили содержимое' .fetch 'ваша программа продолжает работать до тех пор, пока' .fetch' не вернется с сервера ... тогда результаты будут помещены в обратный вызов или где-нибудь сохранены. – Norguard

ответ

0

Вот простая страница, которая использует Ajax

<!DOCTYPE html> 
<html> 
<head> 
    <script> 
    function loadXMLDoc() 
    { 
    var xmlhttp; 
    if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
     } 
    else 
     {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
     document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 
     } 
    } 
    xmlhttp.open("GET","<<URL>>",true); 
    xmlhttp.send(); 
    } 
</script> 
</head> 
<body> 

<div id="myDiv"><h2>Results will go here</h2></div> 
<button type="button" onclick="loadXMLDoc()">Get Results</button> 

</body> 
</html> 

Смотрите, где используется xmlHttp.responseText? Вот где вы получите свои строки.

0

У меня нет понятия, какой у вас код, но основная идея - это что-то вроде этого (с использованием jQuery, не знаю, находится ли это в вашем стеке или нет). И это предполагает, что Chat.fetch() синхронно, иначе вам нужно будет инициировать событие, когда это будет сделано, или использовать обещание или что-то еще.

messages = Chat.fetch(); 
for (i=0; i<messages.length; i++) { 
     $('#chat-window').append('<br>' + messages[i]); 
} 
+0

'.fetch' практически гарантированно будет асинхронным, учитывая описание, если чат-приложение не делает это неправильно. – Norguard

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