2016-03-13 9 views
0

Я обслуживаю веб-приложение, сделанное с флягой. Я просто добавил функцию, чтобы сделать запрос геокодирования на google с помощью ajax. Таким образом, нажатие кнопки вызывает эту функцию в файле loc_gm.js:Использование колбы и ajax

$(function() { 
$('#geo_google').click(function() { 

    $.ajax({ 
     url: 'geo_gm', 
     data: $('form').serialize(), 
     type: 'POST', 
     success: function(response) { 
      response = JSON.parse(response) 
      $('#Lat').val(response['lat']); 
      $('#Long').val(response['lng']); 
     }, 
     error: function(error) { 
      console.log(error); 
     } 
    }); 
}); 

});

И это код в view.py:

@app.route('/geo_gm', methods=('GET', 'POST')) 
def geo_gm(): 
    calle1 = request.form['calle1'] 
    calle2 = request.form['calle2'] 
    altura = request.form['altura'] 

if calle1 and calle2: 
    address = '{}+y+{},+CABA,+AR'.format(calle1, calle2) 
elif calle1 and altura: 
    address = '{}+{},+CABA,+AR'.format(calle1, altura) 

url = 'https://maps.googleapis.com/maps/api/geocode/json?address={}&key={}'.format(address, GOOGLE_KEY) 
response = requests.get(url) 
result = response.json() 
return json.dumps(result['results'][0]['geometry']['location']) 

Это работает в моей локальной машине (я получить координаты, которые я хочу от Google), но когда я загрузить его на сервер (Digital Ocean) Я получаю эту ошибку в консоли JavaScript:

POST http://192.xx.xx.xxx/geo_gm 404 (НЕ НАЙДЕНО)

Будучи, что IP-адрес тот, на котором находится мое приложение.

Я знаю, что это глупая ошибка, которую я делаю, но я не могу понять это.

Спасибо!

+0

'url: '/ geo_gm',' or '{{url_for ('geo_gm')}}' – Busturdust

+0

Я пробовал оба. Первый из них тот же: работает локально, но не на сервере. Последний из них даже не работает локально ... – Ivan

+0

http://flask.pocoo.org/docs/0.10/patterns/jquery/ – Busturdust

ответ

0

Ну, наконец, я нашел обходное решение.

Я добавил в HTML-файле:

<input type="hidden" id="geo-gm" name="variable" value="{{ url_for('geo_gm') }}"> 

Таким образом, я могу иметь относительный путь к geo_gm функции. А затем в файле JS:

$.ajax({ 
     url: $('#geo-gm').val(), 

Я сделал это так, потому что с помощью {{url_for («geo_gm»)}} непосредственно в файле JS не работает.

Возможно, это не лучший способ сделать это, поэтому, если у кого-то есть лучший способ, я буду рад его услышать.

Спасибо всем.

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