2017-08-31 70 views
0

我收到此錯誤:阿賈克斯後到Python服務器:沒有JSON對象可以被解碼

ValueError: No JSON object could be decoded從服務器

這是從客戶端

 function searchDB(profile_url) { 
      console.log(profile_url); 
      $.ajax({ 
       type: 'POST', 
       url:'http://127.0.0.1:5000/update_greenhouse', 
       data: JSON.stringify(profile_url), 
       contentType: "application/json" 
      }) 
     } 

服務器Ajax請求代碼:

@app.route('/update_greenhouse', methods=['GET', 'POST', 'OPTIONS']) 
def update_gh(): 
    y = request.data 
    print(y) 
    json.loads(y) 

我將contentType設置爲json。爲什麼服務器給我這個錯誤?

+0

使用'request.get_json()' – T4rk1n

+0

發送'profile_url'就是一個真正的json對象?...聽起來像只是一個url ...也許你需要將它真正轉換爲json對象'{profileUrl: PROFILE_URL}'? –

+0

在AJAX請求中添加了'JSON.stringify()'同樣的問題 –

回答

0

看來你沒有發送適當的JSON到服務器。只需設置contentType是不夠的。您的數據(profile_url)需要正確編碼爲JSON對象。

嘗試這樣的事情在你的請求代碼:

data: JSON.stringify({'url': profile_url}) 

你的服務器將獲得一個基本的字典回用。如果你真的想傳遞一個字符串,你可以放棄服務器上的json.loads(),並且從request.data開始操作方向,但是爲了構建超過hello世界應用的任何東西,我強烈建議使用像JSON這樣更結構化的格式。

您還需要爲每個Flask請求返回響應(或錯誤)。如果你正在構建一個基於JSON的API,我建議使用Flask的jsonify。一些東西沿線

return flask.jsonify({'status': 'updated'}) 

成功,可能與任何更新狀態的細節。如果有錯誤,你應該返回用正確的錯誤代碼的響應,如下所示:

return flask.make_response(jsonify({'error': 'Error details'}), 418) 

與任何適當的HTTP error code可更換418

+0

沒有'JSON.stringify()'這樣做? –

+0

您需要傳遞實際的JSON對象。 – robmathers

+0

是不是一個有效的json對象的字符串? –

0

我不知道爲什麼,但是在methods=[]中是"OPTIONS"引起的問題。刪除它,一切工作。