Flask - window.location не работает в Firefox (последние версии) - PullRequest
0 голосов
/ 08 октября 2018

В моем приложении Flask я создаю группу a hrefs, которая перенаправит пользователя на другую страницу, содержащую форму ввода.Эта форма ввода будет предварительно заполнена через this.innerHTML. Она отлично работает во всех браузерах, кроме Firefox, где я получаю ValueError: View function did not return a response.

{% for x in text %}
  <p>{{ x["address"] }} : <strong><a href="">{{ x["car_park_no"] }}</a></strong> </p>
{% endfor %}

Это меня особенно смущает, так как я везде проверял в Google и SO и пробовал все возможные исправления, которые могут быть связаны с Firefox ... (window.location) против (window.location.href) против (window.location.assign)vs make function return false

Я понимаю, что в SO есть вопросы относительно того, как эта ошибка возникает, только когда функции не возвращают ответ. Однако моя функция здесь уже возвращает ответ.И эта ошибка не возникает в Chrome / Internet Explorer / Safari / Edge, только в Firefox.

<script>
  // add query strings
  window.onload = function() {
    var elements = document.getElementsByTagName('a');
      for(var i = 0, len = elements.length; i < len; i++) {
        elements[i].onclick = function () {
        event.preventDefault(); 
        window.location = "/lotfinder?address=" + this.innerHTML;
      }, false;
    }
  }
</script>

Любая помощь будет принята, оставьте комментарий, если вам требуется больше фрагментов кода.

edit: код в конечной точке / lotfinder

    <h1>carpark.py</h1>
      <form action = "/carpark" method = "POST">
         <p>Carpark No: <input type = "text" id="carpark-input" name = "Carpark" required></p>
         <p><input type = "submit" value = "submit"></p>
      </form>
   </body>
  <script>

  const carparkInput = document.getElementById("carpark-input");
  // use new URLSearchParams API instead of ugly regex querystring parsing
  window.onload = function() {
    var urlParams = new URLSearchParams(window.location.search);
    carparkInput.value = urlParams.get('address');
  }

</script>

Выше HTML, ниже обработчик

@app.route('/lotfinder',methods = ['POST', 'GET'])
def car1():
    if request.method == 'GET':
        return render_template("car1.html")

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Просто передайте событие в анонимную функцию в качестве параметра

elements[i].onclick = function ( event ) {

Спасибо

0 голосов
/ 08 октября 2018

Я думаю, что вы назначаете false для всех ваших обработчиков событий щелчка.Попробуйте это:

 // add query strings
 window.onload = function() {
   var elements = document.getElementsByTagName('a');
     for(var i = 0, len = elements.length; i < len; i++) {
       elements[i].onclick = function () {
       event.preventDefault(); 
       window.location = "/lotfinder?address=" + this.innerHTML;
     };
   }
 }

Flask возвращает ошибку ValueError: View function did not return a response, когда одна из ваших функций не возвращает значение.См. Функция просмотра ошибки Flask Value не вернула ответ

Вы можете попробовать отредактировать вашу функцию конечной точки следующим образом:

@app.route('/lotfinder',methods = ['POST', 'GET'])
def car1():
    if request.method == 'GET':
        return render_template("car1.html")
    return 'OK'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...