Вход

Просмотр полной версии : Как считать файл внутри функции jQuery "click"?


javascript_pupil
08.10.2019, 10:12
$("#testing").click(function() {

url = "example.com";

window.open(url);
});


При нажатии на объект происходит переход на заданный URL. Но прописывать URL жестко в коде нельзя, его надо считать из локального текстового файла из одной строки "text.txt". Но если вставлять внутрь данного кода другую функцию jQuery (jQuery.get()), то ничего не работает.

Как сделать, чтобы в переменную "url" считывалась строка из файла? Желательно с помощью jQuery.

laimas
08.10.2019, 10:22
его надо считать из локального текстового файла из одной строки "text.txt"

То есть не о веб приложении идет речь?

javascript_pupil
08.10.2019, 10:41
Нет. Просто на сайте есть необходимость использовать единый javascript, а значения URL на разных сайтах могут быть разные. Поэтому их надо брать из файла. А код, приведённый в качестве решения такого вопроса:

$.get('file_to_read.txt', function(data) {
do_something_with(data)
}, 'text');
// ^------last argument


При установке в мой скрипт не работает. Как я понимаю его нужно как-то модифицировать, но с jQuery не знаком.

laimas
08.10.2019, 10:52
значения URL на разных сайтах могут быть разные

Так о чем идет речь, о сетевом файле или локальном?

javascript_pupil
08.10.2019, 10:57
Файл лежит на сайте (сервере). Скрипт на этом же сайте и сервере. Не знаю каким файл считается. Вроде бы он локальный для скрипта. Раз они в одном месте живут, на одном физическом сервере и на одном домене. Не?

laimas
08.10.2019, 11:02
Вроде бы он локальный для скрипта

Страница у клиента и локальным файлом для нее будут файлы на компьютере клиента, а те что на сервере, это сетевые файлы. Если указать 'file_to_read.txt', значит на сервере файл будет искаться в корне документов - //domain/file_to_read.txt. Так что проверяйте путь.

javascript_pupil
08.10.2019, 12:02
Пишу:

$.get('https://example.com/robots.txt', function(data) {
alert(data);
}, 'text');

и ничего не происходит. Полный путь, вместо "example.com" адрес сайта. И без полного пути тоже не работает с '/robots.txt'.

laimas
08.10.2019, 12:11
Все должно работать, если файл в корне документов, то достаточно указать только имя файла. Не будет вывод результата только в том случае, если этот файл на другом домене, то есть страница запрашиваемая не принадлежит example.com. В этом случае это кроссдоменный запрос, и получить к нему доступ можно только если example.com дает на это разрешение. В противном случае нужен посредник - сервер, свой или прокси.

javascript_pupil
08.10.2019, 12:30
Вот полный код, который не работает:


$("#testing").click(function() {

$.get('https://example.com/robots.txt', function(data) {
alert(data);
}, 'text');

});


Код специально упростил, чтобы увидеть текст хотя бы в alert. Нет ничего.

IE 11 выдает: Объект не поддерживает свойство или метод get.
Chrome: Uncaught TypeError: $.get is not a function.

laimas
08.10.2019, 12:45
jQury нужно подключить, чтобы использовать ее функции. Ошибка же указывает причину - Uncaught TypeError: $.get is not a function.

javascript_pupil
08.10.2019, 13:40
jQuery подключен: "click" ведь работает. Иначе бы сюда как бы попасть было? В том то и дело, что функция внутри функции и видимо в этом проблема. Если выкинуть строки 3-5, то по щелчку мышью alert срабатывает. Он бы не работал, если бы jQuery не было.

laimas
08.10.2019, 13:50
Разместить на сервере в корне документов:

<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('button').click(function() {
$.get('test.txt', function(d) {
alert(d)
});
});
});
</script>
</head>
<body>
<button>GO</button>
</body>
</html>

и файл test.txt. Щелкнуть по кнопке, покажет содержимое текстового файла. $('button').click ... это установка обработчика, в котором функция выполнит запрос $.get... и это не может быть причиной ошибки.

javascript_pupil
08.10.2019, 14:12
Да, Ваш вариант работает. Похоже проблема в том, что я использую немного другую библиотеку:


<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abt TE1Pi6jizo" crossorigin="anonymous"></script>


Если меняю строку с Google на вышеуказанную, то работать перестаёт. Может как-то можно сделать чтобы работало и на этой версии?

laimas
08.10.2019, 14:18
Подключайте не slim - https://code.jquery.com/jquery-3.3.1.min.js

javascript_pupil
08.10.2019, 14:44
Может быть есть какие-то другие варианты, чтобы использовать указанную мною строку? Дело в том, что всё это завязано на bootstrap и когда он обновляется, то придется каждый раз решать вопросы с совместимостью.

Надо всего лишь прочитать 1 строку из текстового файла. Без разницы как - главное, чтобы работало во всех браузерах.

laimas
08.10.2019, 15:00
Может быть есть какие-то другие варианты, чтобы использовать указанную мною строку? Дело в том, что всё это завязано на bootstrap и когда он обновляется, то придется каждый раз решать вопросы с совместимостью.

Slim версия как раз отличается тем, что в ней нет поддержки ajax, эффектов и еще чего-то там. В остальном это тоже самое и никак не отразится на bootstrap.

javascript_pupil
10.10.2019, 08:24
Да, всё правильно, спасибо! На сайте написано:
We use jQuery’s slim build, but the full version is also supported.
Кстати, я сравнил, по размеру они не сильно отличаются: 69 Кб "слим" и 85 Кб "не слим". :)

javascript_pupil
17.10.2019, 08:46
В процессе работы обнаружился глюк: на мобильных устройствах под управлением iOS не все браузеры переходят по нажатию на объект. Chrome предупреждает об открытии нового окна, а Safari и FireFox не реагируют никак.

Вопрос: как искать причину глюка?