簡體   English   中英

如何將兩個參數傳遞給 ajax 函數調用的 python 函數?

[英]How to pass two arguments to a python function that is being called by ajax function?

我正在使用 Flask 制作一個網絡應用程序,並希望在單擊按鈕時調用此函數並且頁面不重新加載:

@app.route('/add_song_to_playlist')
def add_song_to_playlist(pl_id, s_id):
    sp = songs_playlists(song_id = s_id, playlist_id = pl_id)
    db.session.add(sp)
    db.session.commit()
    return "nothing"

但是它需要兩個參數,我不確定如何在 ajax 函數中傳遞它們。 我還需要它們像帶有 {{ }} 的內聯 python 代碼一樣。

這是模板和按鈕中的 ajax 函數,以及我試圖作為 getJSON() 接受的“數據”參數傳遞的內容:

<div class="dropdown-menu dropdown-menu-right float-left">
    <a class="dropdown-item" href="{{ url_for('make_playlist') }}"> Create a new playlist </a>
    {% for p in pl %}
    <form>
        <a class="dropdown-item" href="#" id=add_song> {{ p.playlist_name }} </a>
    </form>
    <script type=text/javascript>
        $(function() {
            $('a#add_song').on('click', function(e) {
            e.preventDefault()
            $.getJSON('/add_song_to_playlist', );
            return false;
            });
        });
    </script>
</div>
{% endfor %}

但似乎不起作用,我什至沒想到它會起作用。 我閱讀了關於這個函數的 jquery 文檔,但它沒有提到將兩個參數作為 python 代碼傳遞(可能是因為我缺乏 JS 知識)。 任何幫助將不勝感激!

您可以像這樣指定路由參數:

@app.route('/add_song_to_playlist/<pl_id>/<s_id>', methods=['POST'])
def add_song_to_playlist(pl_id, s_id):
    sp = songs_playlists(song_id = s_id, playlist_id = pl_id)
    db.session.add(sp)
    db.session.commit()
    return "nothing"

您的 http 調用應如下所示: https://server_ip/add_song_to_playlist/playlist_id/song_id

看看這里: https : //pythonbasics.org/flask-tutorial-routes/

或者您可以通過 post call 的主體傳遞它們,然后按如下方式訪問它們:

@app.route('/add_song_to_playlist', methods=['POST'])
def add_song_to_playlist():
    pl_id = request.form.get('pl_id')
    s_id = request.form.get('s_id')
    sp = songs_playlists(song_id = s_id, playlist_id = pl_id)
    db.session.add(sp)
    db.session.commit()
    return "nothing"

或者,也通過獲取請求: https://server_ip/add_song_to_playlist?playlist_id=pl_id&song_id=s_id

@app.route('/add_song_to_playlist', methods=['GET'])
def add_song_to_playlist():
    pl_id = request.args.get('pl_id')
    s_id = request.args.get('s_id')
    sp = songs_playlists(song_id = s_id, playlist_id = pl_id)
    db.session.add(sp)
    db.session.commit()
    return "nothing"

在我看來,管理有問題的電話的最佳方法是第一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM