2016-08-10 2 views
0

Я пытаюсь написать чатбот для развлечения, и одной из его основных функций является поиск meme. Сначала я написал это в Python, но теперь я переписываю его на JavaScript, так как он может работать полностью на стороне клиента.Сценарий, вызывающий DevTools для сбоя

Вот мой JavaScript meme() функция:

function meme(srch) { 
    reqUrl = "http://api.pixplorer.co.uk/image?amount=1&size=tb&word=meme"; 
    memesrch = ""; 
    while (srch) { 
    memesrch += "+" + srch[0]; 
    srch.slice(1); 
    } 
    reqUrl += memesrch; 
    $.get(reqUrl, function(result) { 
    memeUrl = result['images'][0]['imageurl']; 
    }); 
    return "<a href='" + memeUrl + "'><img src='" + memeUrl + "' style='height: 130px;' /></a>"; 
} 

Вот исходная функция Python для него, если это может помочь:

def meme(srch): 
    reqUrl = "http://api.pixplorer.co.uk/image?amount=1&size=tb&word=meme" 
    if srch: 
     memesrch = "" 
     while srch: 
      memesrch += srch[0] + "+" 
      srch = srch[1:] 
     memesrch = memesrch[:-1] 
     reqUrl += memesrch 
    memeUrl = eval(urllib2.urlopen(reqUrl).read())['images'][0]['imageurl'] 
    return "<a href='" + memeUrl + "'><img src='" + memeUrl + "' style='height: 130px;' /></a>" 

Моя проблема состоит в том, что когда я первый запустить meme() в консоль после загрузки/перезагрузки страницы, она говорит, что переменная memeUrl не определена. Затем, со второго раза, он отлично работает. Однако, если я затем набираю meme(["doge"]) или передаю любую строку в массиве или даже строку, такую ​​как meme("hello"), в функцию meme(), она ничего не возвращает, даже не ошибка. После этого все, что я напечатаю, ничего не возвращает, даже не что-то вроде 1+1, или 3, или $. Через несколько секунд веб-страница выйдет из строя. Вот несколько скриншотов: Screenshot of DevTools, Screenshot of Webpage Crash.

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

+0

Возможная Дубликат [? Как вернуть ответ от асинхронного вызова] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-a-асинхронный вызов) – Andreas

+0

['Array.prototype.join()'] (https://developer.mozilla.org/en-US/docs/ Web/JavaScript/Reference/Global_Objects/Array/join) – Andreas

ответ

0

Существует бесконечный цикл:

while (srch) { 
    ... 
} 

srch.slice не изменяет originial массив "SRCH". Может быть, это решает проблему: Вместо того, чтобы цикл в то время как сделать следующее:

memesrch = (srch typeof Array) 
    ? '+' + srch.join('+') 
    : '+' + srch; 
+0

Спасибо за помощь! Когда я заменяю цикл while предложением, он говорит недействительный токен typeof. Однако, когда я заменяю 'srch.slice (1)' '' srch = srch.slice (1) 'в моем исходном скрипте, он работает отлично, с одной проблемой. В первом запросе указано, что memeUrl не определен, и затем каждый запрос с этого момента возвращает изображение предыдущего запроса. Я попытался исправить это с помощью 'while (! MemeUrl) {}' после запроса get, но это тоже не исправляет. –

+0

Поместите этот фрагмент кода перед вашим '$ .get':' var memeUrl = ''; '. – simialbi

+0

Я пытался это сделать, но потом ничего не возвращает. Я попытался изменить 'while (! MemeUrl) {}' to 'while (! MemeUrl) {console.log (1);}', чтобы проверить, находится ли он в другом бесконечном цикле и почему-то это было. –

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