Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как считать файл внутри функции jQuery "click"? (https://javascript.ru/forum/misc/78591-kak-schitat-fajjl-vnutri-funkcii-jquery-click.html)

javascript_pupil 08.10.2019 10:12

Как считать файл внутри функции jQuery "click"?
 
$("#testing").click(function() {

url = "example.com";

window.open(url);
});


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

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

laimas 08.10.2019 10:22

Цитата:

Сообщение от javascript_pupil
его надо считать из локального текстового файла из одной строки "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

Цитата:

Сообщение от javascript_pupil
значения URL на разных сайтах могут быть разные

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

javascript_pupil 08.10.2019 10:57

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

laimas 08.10.2019 11:02

Цитата:

Сообщение от javascript_pupil
Вроде бы он локальный для скрипта

Страница у клиента и локальным файлом для нее будут файлы на компьютере клиента, а те что на сервере, это сетевые файлы. Если указать '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+8abtTE1Pi6jizo" 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

Цитата:

Сообщение от javascript_pupil
Может быть есть какие-то другие варианты, чтобы использовать указанную мною строку? Дело в том, что всё это завязано на 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 не реагируют никак.

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


Часовой пояс GMT +3, время: 14:27.