2016-09-02 2 views
0

Итак, у меня есть этот простой скрипт python, запущенный на Flask, который я хотел бы передать переменными с помощью запроса ajax jQuery. Я мог бы пропустить что-то очевидное, но я не могу заставить его работать правильно.запускает скрипт python в Flask

@app.route('/test', methods=['GET', 'POST']) 
def test(): 
    my_int1 = request.args.get('a') 
    my_int2 = request.args.get('b') 
    my_list = [my_int1, my_int2] 
    with open('my_csv.csv', 'wb') as myfile: 
     wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) 
     wr.writerow(my_list) 
    return '' #does one have to have an return even tho it is just a script? 

Итак, выше будет работать нормально, когда только передача параметров в поле URL: http://127.0.0.1:5000/test?a=10&b=25 однако, пытаясь это в хромированной консоли не даст никакого вывода вообще:

$.ajax({ 
    method: "POST", 
    url: "127.0.0.1:5000/test", 
    data: {a: 10, b: 25}, 
    dataType: "script" 
}); 

Что я упускаю и почему этот запрос jquery ajax не работает? $.ajax is not a function(…)

+0

Я думаю, есть проблема с вашей ссылкой Jquery в этом HTML-файле. – ramesh

+0

Проверьте ответ в браузере. Может быть, какой-то заголовок отсутствует, например, разрешить управление доступом – Fabiano

ответ

1

Пожалуйста, попробуйте следующий код и дайте мне знать, если это то, что вы ищете:

from flask import Flask, request 
import csv 

app = Flask(__name__) 


@app.route('/test', methods=['GET', 'POST']) 
def test(): 
    if request.is_xhr: 
     a = request.json['a'] 
     b = request.json['b'] 
    else: 
     a = request.args.get('a') 
     b = request.args.get('b') 
    my_list = [a, b] 
    with open('my_csv.csv', 'wb') as myfile: 
     wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) 
     wr.writerow(my_list) 
    return ''' 
<html> 
    <head> 
    <title>This is just a testing template!</title> 
    </head> 
    <body> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    </body> 
</html> 
''' 


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

Чтобы проверить из консоли Chrome, вам нужно сначала перейти к http://127.0.0.1:5000/test (после этого, JQuery будет доступен в вашем браузере), а затем выполнить следующий код:

$.ajax({ 
    url: "http://127.0.0.1:5000/test", 
    method: "POST", 
    headers: {'Content-Type':'application/json'}, 
    data: JSON.stringify({a: 10, b: 25}), 
    success: function(data){console.log('result: ' + data);} 
}); 

Если у вас есть вопрос Cross-Origin, добавить также ниже код на свой app.py файла:

@app.after_request 
def after_request(response): 
    response.headers.add('Access-Control-Allow-Origin', '*') 
    response.headers.add('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept') 
    response.headers.add('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, OPTIONS') 
    return response 
+0

, могу я спросить вас, что делать, если у меня есть веб-сайт и приложение для флэсов, которое работает только как веб-сервер. Веб-сайт и веб-сервер не связаны/не связаны с одним и тем же доменом/IP. Возможно ли запустить огонь из этого веб-сайта? и как? –

+0

Вы имеете в виду, что у вас есть статический веб-сайт (только с javascript, html и т. Д.), И вы хотите использовать его для использования API Flask? – ettanany

+0

Да, но на данный момент это не успокаивающий API. Возможно ли, не превратив мое приложение в какой-то ненадежный API? возможно, это не в тему. –

1

Пожалуйста, обратитесь к http://flask.pocoo.org/docs/0.11/api/#flask.Request

request.args : If you want the parameters in the URL 
request.form : If you want the information in the body (as sent by a html POST form) 
request.values : If you want both 

Попробуйте

@app.route('/test', methods=['GET', 'POST']) 
def test(): 
    my_int1 = request.values.get('a') 
    my_int2 = request.values.get('b') 
0

Оказывается вашу ссылку JQuery на этой HTML страницы не загружаются или не правильно, пожалуйста, добавьте это в <head> here </head> разделе вашей HTML-странице.

<script src="https://code.jquery.com/jquery-3.1.0.js"></script>