2015-10-19 3 views
0

Я пишу следующий HTML-кодGetting 400 плохой запрос

<!DOCTYPE html> 
<html> 
<head> 
    <link rel="stylesheet" type="text/css" href="/static/css/grafana_style_sheet.css"> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"> </script> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
     $("#Click").click(function(){ 
      alert('hi '+ $('#databases').val()); 
      var data1 = new Object(); 

      data1.name = $('#databases').val(); 
      data1.dbname = 'grafana'; 

      alert(data1.dbname + " " + data1.name); 
      $.ajax({ 
       url : "dashboards", 
       type : 'POST', 
       data : 'data1', 
       dataType : "text", 
       success : function(){ 
        data = JSON.parse(data); 
        console.log("hi " + data); 
       } 
      }); 
     }); 
    }); 
    </script> 
</head> 
<body> 
    <div id="header">Report Suites</div> 
    <form> 
     <fieldset id = "fieldset"> 
      <legend align = "center"><font color= "#00008B"><strong>Select your Report Suite<strong></font></legend> 
      <select id ="databases" name = "db"> 
       <option value = "">--Select From following--</option> 
       <option value = "HARMONY">HARMONY</opton> 
       <option value = "CAMPS">CAMPS</opton> 
       <option value = "QBSU">QBSU</opton> 
       <option value = "SIMBA">SIMBA</opton> 
      </select> 
      <br><br> 
      <button type = "button" id = "Click"> Click Me!!</button> 
     </fieldset> 
    </form> 

      <div id ="placeholder"></div> 
</body> 
</html> 

Для запуска выше HTML-код, я написал следующую программу Python, используя флягу так, чтобы отправить данные из формы (выше) и запустить запрос на основе этого.

from flask import Flask, render_template, json, request 
from flask import Flask, request, abort, jsonify 
from flaskext.mysql import MySQL 
import MySQLdb 

app = Flask(__name__) 

def connection(database): 
    db = MySQLdb.connect("localhost","root","",database) 
    cursor = db.cursor() 
    return cursor 

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

@app.route("/dashboards",methods=['POST']) 
def connect(): 
    dtb = request.form['dbname'] 
    b = request.form['name'] 
    conn = connection(dtb) 

    conn.execute("SELECT * FROM SuiteDetails WHERE RS_name=%s",b) 
    results = conn.fetchall() 
    json_return_value =[] 

    for result in results: 
     table_data = {'RS_name' : result[0], 'RS_id' : result[1], 'Staging_db' : result[2], 'Trans_db' : result[3], 'Base_Date' : result[4], 'graph_link' : result[5]} 
     json_return_value.append(table_data) 
    print json.dumps(json_return_value) 
    return json.dumps(json_return_value) 

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

Когда я запускаю его на firefox, я получаю ответ от 400 BAD REQUEST.

Пожалуйста, скажите мне, что я делаю неправильно.

+0

Вы можете проверить запрос, сделанный в разделе «сеть» вашего браузера dev tools? – jlnabais

+0

Я запускаю его на firefox и используя firebug. Он дал некоторые заголовки запроса следующим образом: Принять \t текст/plain, */*; д = 0,01 Accept-Encoding \t GZIP, выкачать Accept-Language \t EN-US, еп, д = 0,5 Cache-Control \t нет кэша соединения \t поддержания активности Content-Length \t Content-Type \t application/x-www-form-urlencoded; кодировка = UTF-8 Хост \t 127.0.0.1:5000 Pragma \t нет кэша Referer \t http://127.0.0.1:5000/ User-Agent \t Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv: 38.0) Gecko/20100101 Firefox/38.0 X-Requested-With \t XMLHttpRequest – sk215

+0

Это вы хотели – sk215

ответ

1

Я думаю, что проблема в jQuery POST, вы не передаете полный URL-адрес, просто действие, и вы хотите передать data1 вместо 'data1' (вы хотите объект, а не строку). Таким образом, вместо:

$.ajax({ 
    url : "dashboards", 
    type : 'POST', 
    data : 'data1', 
    dataType : "text", 
    success : function(){ 
     data = JSON.parse(data); 
     console.log("hi " + data); 
    } 
}); 

Вы должны иметь:

$.ajax({ 
    url : "http://<YOUR_HOST>/dashboards", 
    type : 'POST', 
    data : data1, 
    dataType : "text", 
    success : function(){ 
     data = JSON.parse(data); 
     console.log("hi " + data); 
    } 
}); 

Обратите внимание, что вы должны изменить <YOUR_HOST> вашего хозяина, если вы стереосистему и обновите его на место (и с колбами defaulst) она должна быть 127.0.0.1:5000.

Надеюсь, что это поможет

+1

Я нашел ошибку. Я должен передавать данные: data1, а не данные: 'data1'. data1 - мой объект, и, заключая его в кавычки, я отправляю его как строку. Я удалил кавычки, и мой код работает хорошо. Спасибо за быстрый ответ :) – sk215

+0

Право, пропустил это тоже, я всегда использую полный Uri, но, возможно, потому, что вы в корне того же домена, который тоже работает. Чтобы отредактировать мой ответ, включите его тоже. – jlnabais

Смежные вопросы