2016-08-10 8 views
0

私はエンターテインメントのためのチャットボットを作成しようとしています。主な機能の1つは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は定義されていません。その後、2回目以降、正常に動作します。しかし、meme(["doge"])と入力するか、配列に文字列を指定するか、またはmeme()関数にmeme("hello")のような文字列を指定しても、エラーは返されません。その後、タイプするものは何も返されません。1+13$のようなものでもありません。数秒後にウェブページがクラッシュします。いくつかのスクリーンショットがあります:Screenshot of DevToolsScreenshot of Webpage Crash

この問題の原因となる可能性がある唯一のことは、無限ループですが、私のコードにはありません。

while (srch) { 
    ... 
} 

srch.slice

は "SRCH" originial配列を変更しません:

+0

[?私は非同期呼び出しからの応答を返すにはどうすればよい](の可能性のある重複http://stackoverflow.com/questions/14220321非同期呼び出しからの応答を返す) – Andreas

+0

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

答えて

0

は、無限ループがあります。 は多分これはあなたの問題を解決:あなたのwhileループを行う代わりに、以下:

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

ご協力ありがとうございます! whileループをあなたの提案に置き換えると、無効なトークンのタイプが示されます。しかし、私のオリジナルのスクリプトで 'srch.slice(1)'を 'srch = srch.slice(1)'に置き換えると、問題なく完璧に動作します。最初のリクエストではmemeUrlが定義されていないと表示され、その後のすべてのリクエストは前のリクエストのイメージを返します。私はこれをget要求の後に 'while(!memeUrl){}'で修正しようとしましたが、それも修正されません。 –

+0

このコードを '$ .get'の前に入れてください:' var memeUrl = ''; '。 – simialbi

+0

私はそれをやってみましたが、何も返されません。私は 'while(!memeUrl){}'をwhile(!memeUrl){console.log(1);} 'に変更して、別の無限ループに入っているかどうか、何らかの理由でチェックしてみました。 –

関連する問題