2014-10-07 4 views
1

У меня есть HTML-форма, которую я хочу отправить на конечную точку фляги/add_int. Когда форма будет отправлена ​​перехватывать его с Jquery и отправить форму в конечную точку с помощью AJAX следующим образом:AJAX неправильно разрешает URL

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?

Я предполагаю, что мой url решается как объект String, а не URL-адрес, но я не могу понять, почему это происходит, и как его исправить.

Что происходит?

ответ

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

Awesome. Это доводит меня до нужной точки! – ABM

+2

Чтобы добавить к ответу немного, '$ .ajax' нужен ключ' url'. Ярлыки (например, '$ .get',' $ .post') принимают URL как первый параметр. – dirn

2

Вы должны удалить вызов JSON.stringify, вы можете передать сериализованную форму непосредственно в качестве POST данных и JSON.stringify превращает ваш объект в [Object object].

url: '/add_int', не работает, потому что (кажется, что) ваш интерфейс работает на другом порту, чем сервер, поэтому он будет отклонен как запрос «перекрестного домена». Вы проверили стоимость, возвращаемую "{{ url_for('add_int') }}"?

+0

Я внес изменения в JSON.stringify, но безрезультатно. – ABM

+1

Я только что обновил свой ответ, что такое '' {{url_for ('add_int')}} "' return? И если вы проверяете запрос в консоли, правильные ли данные передаются на сервер? –

+0

Спасибо. Я запутался в URL-адресе, потому что я могу использовать url: '/ add_int' в качестве URL-адреса для запроса GET ajax без каких-либо затруднений. – ABM

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