2

ボタンのクリックを受け入れる Web アプリケーションを作成しようとしています。クリックされたボタンは、特定のデバイスと操作コードを Python アプリケーションに送信し、Python アプリケーションは Lirc を使用して irsend コマンドを呼び出します。これは、次のソース コード/手順に基づいています。

https://github.com/slimjim777/web-irsend

http://randomtutor.blogspot.com/2013/01/web-based-ir-remote-on-raspberry-pi.html

ボタンの html は単純で、「Xbox.html」にあります。

<button onclick="clickedOp('Xbox', 'OnOff');"> Power </button>

これにより、js 関数が起動します。

<script>
function clickedOp(device_name, op) {
    $.ajax({url:'/' + device_name + '/clicked/' + op});
}

clickedOp 関数にアラート コマンドを配置すると、アラート コマンドが実行されるため、関数がクリック イベントで起動していることはわかっています。

python/flask アプリは次のようになります。

from flask import Flask
from flask import render_template
from flask import request, redirect, url_for

BASE_URL = ''

app = Flask(__name__)


@app.route("/")
def menu():
    return render_template('menu.html')

@app.route("/<device_name>")
def remote(device_name):
    if device_name == "Xbox":
        return render_template('Xbox.html')


@app.route("/<device_name>/clicked/<op>")
def clicked(device_id=None, op=None):
    return render_template('test.html')

if __name__ == "__main__":
    app.run('0.0.0.0', port=80, debug=True)

ajax リクエストまでのすべてのコードが機能します。「/」に移動すると、menu.html テンプレートが読み込まれ、さまざまなデバイスへのリンクが表示されます。たとえば、

<a href="Xbox"> Xbox </a>

にルーティングします

"/<device_name>" 

python プログラムで「Xbox.html」が読み込まれます。次に、ボタンが読み込まれ、クリックすると、「clickedOp(device_name, op)」関数が起動します。これが壊れるところです。ajax リクエストが

"/<device_name>/clicked/<op>" 

「test.html」ページがロードされていません

これは、Flask デバッガーが "/Xbox/clicked/OnOff" (上記の例の変数を入力) への GET 要求 (200 を返す) が成功したことを示している場合でも当てはまります。

私が提供したソースコード/チュートリアルで彼が同じ ajax メソッドを使用しているように見えるのに、なぜ test.html が ajax リクエストからロードされないのか考えてみませんか?

4

2 に答える 2

1

コードでは、テンプレートがレンダリングされ、jquery Ajax オブジェクトに返されますが、それは何も行わず、ブラウザーにはレンダリングされません。ブラウザーの開発者ツールを使用して、ブラウザーが応答を受信したかどうかを確認しましたか? 繰り返しますが、Flask が HTTP 200 OK をログに記録する場合、要求が正しく処理されていると思います。また、Flask メソッドに print ステートメントを入れて、ログに記録することもできるはずです (私はそう思います)。

于 2013-07-20T11:59:11.473 に答える