2016-10-12 5 views
-1

Я звоню my_function на форме submit. Функция просматривает текстовый файл для номера, введенного пользователем в my_input. Если этого номера не существует, функция выдает предупреждение и должна прекратить отправку формы.JQuery GET на простом javascript

Моя проблема: отображается предупреждение, но когда я его закрываю, форма отправляется. Моя проблема аналогична этой теме: How do I return the response from an asynchronous call?

Одно из решений, которое нужно сделать GET на простом javascript. Может кто-нибудь помочь, пожалуйста? Это слишком продвинуто для меня.

function my_function() { 
    $.get("http://www.example.com/file.txt", function(contents) { 
    var my_number = document.getElementById("my_input").value; 
    var hasString = contents.includes(my_number); 
    }); 
    console.log(hasString); // **ALWAYS RETURNS UNDEFINED** 
    if (hasString == false) { 
    alert('Number does not exist in text file!'); 
    return false; 
    } 
} 
+0

Я просто просил указать свой код, как сделать get без jquery. – Malasorte

+0

Вы пробовали один из методов из связанного с вами сообщения, в частности, части о том, чтобы позволить функциям принимать обратные вызовы в качестве параметров? – showdev

+3

Сообщение, которое вы указали, буквально отвечает на ваш вопрос. – Yoda

ответ

0

hasString является локальной переменной функции обратного вызова, предоставленной $.get в качестве второго аргумента. Вот почему это не определено вне указанной функции. Обратите внимание, что просто перемещение объявления переменной во внешнюю область не устранит проблему, так как функция обратного вызова будет выполнена после проверки hasString == false в любом случае (она будет выполнена, когда запрос на получение будет завершен).

Ответ на ваш вопрос более непосредственно: либо синхронно выполняйте запрос получения (и должным образом объявите переменную в области, в которой вы должны ее использовать), либо перестройте свой код, чтобы использовать информацию, полученную по запросу запроса только внутри обратного вызова. Прочтите the post @abc123 mentions для получения дополнительной информации.

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