Множественные запросы ajax, возникающие в зависимости от количества использованных входных данных

#javascript #jquery #ajax

#javascript #jquery #ajax

Вопрос:

У меня странная ошибка, когда я выполняю загрузку ajax из входных данных. Я понимаю, что это может быть глупым способом, но это был единственный способ, который я нашел, чтобы заставить IE сотрудничать с использованием клавиши enter. Затем у меня возникла отдельная проблема, связанная с тем, что отправка в IE продолжала открывать новое окно, а не просто использовать Ajax GET . Итак .. Я полностью отказался от формы и пытаюсь делать все с помощью javascript.. что-то вроде этого :

 <input class="myInput" type="text"></input>
<img src="submitbutton" class="submitIt" />
  

Я запускаю функцию ajax с :

 $('.submitbutton').click{function() { ajaxFunction(); });
  

который работает нормально.

а также когда пользователь нажимает enter:

 $('.myInput').keydown(function(e){
if (e.keyCode == 13) {
ajaxFunction();
return false;
}
  

который работает.. для первой записи. Но затем, если вы введете второе число, это сделает этот ajax-запрос 2 раза, третье число = теперь происходит 3 одновременных ajax-запроса в одно и то же место, до бесконечности…

Я почти уверен, что проблема в том, что я неправильно настроил проверку. Функция keydown находится в else {} состоянии, подобном этому, и не будет работать, пока во входных данных не будет ровно 9 чисел.. вот часть этого :

     if ( len !== 9 )
        {
            if ( len == 1 )
            { y.hide(); n.show(); valInput.text("You need 8 more numbers");
            } 
            else                            
                {
                if ( len == 2 )
                { y.hide(); n.show(); valInput.text("You need 7 more numbers");
            }
            ...
         } 
     else {
    $('.myInput').keydown(function(e){
    if (e.keyCode == 13) {
    ajaxFunction();
    return false;
    }

}
  

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

Ответ №1:

У меня странная ошибка, когда я выполняю загрузку ajax из входных данных. Я понимаю, что это может быть глупым способом, но это был единственный способ, который я нашел, чтобы заставить IE сотрудничать с использованием клавиши enter

Возможно, вы используете версию IE. Но нажатие клавиши enter вызывает отправку здесь.

Затем у меня возникла отдельная проблема, связанная с тем, что отправка в IE продолжала открывать новое окно, а не просто использовать Ajax GET . Итак .. Я полностью отказался от формы и пытаюсь делать все с помощью javascript.. что-то вроде этого :

Вам действительно нужно выяснить, почему это происходит, вместо того, чтобы пытаться писать хаки. Это часть игры, а также процесса обучения, и это просто способ сделать это.

Почему бы вам просто не использовать .submit() и «обычную» кнопку отправки, например:

 <form action="#">
    <input type="text" name="myInput">
    <input type="image" src="submitbutton" class="submitIt">
</form>    

$(function() {
    // use this instead of clicking on submit or enter key pressed
    $('form').submit(function() {
        // get character count of input
        var char_count = $('input[name="myInput"]', this).val();

        // validate it
        if (char_count != 9) {
          // still need to initialize y, n and valInput
          y.hide();
          n.show();

          // watch out this may give negative numbers
          // this will take care if the error to be displayed. way better than using lots of ifs :)
          valInput.text('You need ' parseInt(9-char_count, 0) ' more characters');

          return false;
        }

        // can be uncommented if you still want to use AJAX to submit your form, but really it is not needed.
        //ajaxFunction();
        //return false;
    });
});
  

Комментарии:

1. Спасибо PeeHaa.. Я буду работать с этим. Я не использовал ajax только потому, что не хотел иметь дело с формой, но это необходимо, потому что входные данные передают значение в качестве данных в rest, а затем анализируют возвращаемый json.

2. @Zac: Без проблем, просто раскомментируйте эти строки 🙂 Если вам нужна дополнительная помощь (например, путем устранения возникших у вас проблем с IE), просто дайте мне знать.

3. Привет, ПиеХаа, еще раз спасибо.. Мне нужно было просто вернуться к форме, и теперь она работает нормально. Ваш скрипт намного красноречивее, и я бы хотел заставить его работать, но он не работает после первой цифры. Затем все становится отрицательным. Я хочу добавить это в скрипку и поиграть с ним еще немного .. вероятно, в конечном итоге создам для этого новый вопрос SO.

4. @Zac: Теперь я вижу, что допустил ошибку. Я как раз собирался идти домой с работы. Я исправлю это сегодня вечером и обновлю код