2014-10-07 87 views
1

我有一個HTML表單,我想提交給一個瓶頸端點/ add_int。當表單提交我與jQuery截獲它,並提交表單使用AJAX端點如下:AJAX沒有正確解析網址

var form = $(this).serialize() 

$.post({       
    url: "{{ url_for('add_int') }}", 
    data: JSON.stringify(form), 
    contentType: 'application/json;charset=UTF-8',  
    success: function(resp) { 
     console.log(resp); 
    } 
}); 

端點看起來是這樣的:

@app.route('/add_int', methods=['GET', 'POST']) 
@login_required 
def add_int(): 
    # do stuff 
    return jsonify(status="success!") 

我的問題是,我從來沒有到端點

當我審視我的控制檯我看

POST http://127.0.0.1:5000/[object%20Object] 404 (NOT FOUND) 

,而不是

POST http://127.0.0.1:5000/add_int 

如我期望。

需要注意的是,如果我設置

url: '/add_int', 

我遇到了同樣的問題。

我發現使用幾乎相同的代碼,沒有提到這個問題的案例: how can I use data posted from ajax in flask?

我的猜測是,我的網址被解析爲字符串對象而不是網址,但我無法弄清楚它爲什麼會發生,以及如何解決它。

發生了什麼事?

回答

1

嘗試不明確指定散列鍵。 http://api.jquery.com/jquery.post/

$.post("{{ url_for('add_int') }}", 
     JSON.stringify(form), 
     function(resp) { 
      console.log(resp); 
     }, 
     'application/json;charset=UTF-8' 
     ); 
+0

太棒了。這讓我到了正確的端點! – ABM 2014-10-07 17:46:30

+2

爲了增加一點答案,'$ .ajax'需要'url'鍵。快捷方式(.e.g,'$ .get','$ .post')將URL作爲第一個參數。 – dirn 2014-10-07 18:24:08

2

您應該刪除調用JSON.stringify,你可以直接傳遞一個序列化形式爲POST數據和JSON.stringify是把你的對象變成[Object object]

url: '/add_int',不工作,因爲(看起來)您的前端運行在與後端不同的端口上,因此它將作爲「跨域」請求被拒絕。您查看過"{{ url_for('add_int') }}"正在返回的價值嗎?

+0

我對JSON.stringify進行了更改,但都無濟於事。 – ABM 2014-10-07 17:35:02

+1

我剛剛更新了我的答案,什麼是'{{url_for('add_int')}}「'回來了?如果您檢查控制檯中的請求,是否正在將正確的數據傳遞給服務器? – 2014-10-07 17:35:20

+0

謝謝。我對url感到困惑,因爲我可以毫不費力地使用url:'/ add_int'作爲GET ajax請求的url – ABM 2014-10-07 17:37:19