2015-10-19 89 views
0

我寫了下面的HTML代碼入門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

你能檢查瀏覽器開發工具的「網絡」部分中提出的請求嗎? – jlnabais

+0

我在firefox上運行它,並使用螢火蟲。它給了一些請求頭如下:接受\t text/plain,*/*; Q = 0.01 接受編碼\t gzip的,放氣 接受語言\t 的en-US,連接; Q = 0.5 緩存控制\t 無緩存 連接\t 保活 Content-Length的\t Content-Type \t application/x-www-form-urlencoded;字符集= UTF-8 主機\t 127.0.0.1:5000 附註\t 無緩存 的Referer \t http://127.0.0.1:5000/ 的User-Agent \t 的Mozilla/5.0(Macintosh上;英特爾的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

我發現了錯誤。我應該傳遞d​​ata:data1而不是data:'data1'。 data1是我的對象,通過將它包含在引號中,我將它作爲字符串發送。我刪除了引號,我的代碼運行良好。感謝您的快速回復:) – sk215

+0

對,錯過了,我總是使用完整的Uri,但也許是因爲您在同一個域的根目錄也是如此。編輯我的答案也包括了。 – jlnabais