Как получить значения из вызова AJAX GET в колбу restful? - PullRequest
0 голосов
/ 26 марта 2019

Я использую API колб для отдыха, для прогнозирования погоды, flask_rest.py и веб-приложение для использования API с именем main.py.Я пытаюсь отобразить вывод с помощью AJAX в файле HTML с именем sample.html.Но по какой-то причине результат не отображается динамически.Любая помощь приветствуется

flask_rest.py

from flask import Flask, request, jsonify, Response
from flask_restful import Resource, Api, reqparse, abort

import pandas as pd
app = Flask(__name__)
api = Api(app)

df = pd.read_csv(r"C:\Users\jayad\Desktop\Grad\Cloud Computing\dailyweather.csv", index_col=False)
data = df.set_index('DATE').to_dict(orient='index')
data_dict = pd.DataFrame(df['DATE'])
data_dict['INDEX'] = 'DATE'
data_dict = data_dict.set_index('INDEX').to_dict(orient='records')
parser = reqparse.RequestParser()
parser.add_argument('DATE', type=int)
parser.add_argument('TMAX', type=float)
parser.add_argument('TMIN', type=float)



class Historical(Resource):
    def get(self):

        return data_dict


    def post(self):
        args = parser.parse_args()
        val1 = args['DATE']
        val2 = args['TMAX']
        val3 = args['TMIN']
        data[val1] = {"TMAX":val2, "TMIN":val3}
        return data[val1], 500


class Spec_historical(Resource):
    def get(self, num):

        return data[num]

    def delete(self, num):
        del data[num]
        return "DELETION DONE 300"


class forecast(Resource):
    def get(self, num):
        pred_dates={}
        date = int(num)
        pred = date - 10000
        j=date
        for i in range(7):
            if date - i in data:
                x = data.get(date - i)
                v1 = x['TMAX'] + 20
                v2 = x['TMIN'] + 20
                pred_dates[j] = {'TMAX':v1, 'TMIN':v2}

            else:
                if pred - i in data:
                    x = data.get(pred - i)
                    v1 = x['TMAX'] + 10
                    v2 = x['TMIN'] + 10
                    pred_dates[j] = {'TMAX':v1, 'TMIN': v2}
            j+=1

        return pred_dates


api.add_resource(Historical, '/Historical/')
api.add_resource(Spec_historical,'/Historical/<int:num>')
api.add_resource(forecast,'/forecast/<int:num>')

if __name__=="__main__":
    app.run(debug=True, port=5001)

main.py

from flask import Flask, render_template, url_for, redirect, request, jsonify, Response
import requests
import simplejson as json

app = Flask(__name__)

@app.route('/forecast/', methods=['POST','GET'])
def forecast():
    error=''

    if request.method=="POST":

        a=request.form.get('given_date')

        pred_value=requests.get('http://localhost:5001/forecast/'+str(a))
        if pred_value:


            return Response(pred_value)

        return jsonify({'error': 'Missing data'})

    return render_template('sample.html', error=error)

if __name__=='__main__':
    app.run(debug=True, port=5000)

sample.html

<!DOCTYPE html>
<html>
<head>
    <title>WEATHER API</title>  
</head>
<br>
<br>
<br>
<hr>
<body>
<form action="{{url_for('forecast')}}" method="POST">
    <label>DATE</label>
    <input type="text" name="given_date" id="given_date">
    <button class="btn btn-lg btn-primary btn-block" type="submit">Enter </button>
    <br>
    <br>
    <hr>

      <div id="result"/>
    </form> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <script src="../static/jquery-3.0.0.js"></script>
    <script src="text/javascritpt">
        $(document).ready(function(){
            $('submit').on('click',function(event){
                event.preventDefault();
                var $result = $('#result')
                $.ajax({
                    type:'GET',
                    url:'/forecast/',
                    data:$('given_date')
                    dataType:'JSON'
                    success: function(result){
                         $('#result').append(JSON.stringify(result))
                    }

                }) 

             })

         })
        </script>

</body> 
</html>

ПОМОЩЬ !!!

1 Ответ

0 голосов
/ 26 марта 2019

Вам нужно изменить type:'GET' на type:'POST'.

Кроме того, <div> теги требуют закрывающего тега,

поэтому измените это:

 <div id="result"/>

к этому:

<div id="result"></div>

Если у вас все еще проблемы, сообщите мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...