Я пытаюсь скопировать var1
из первой функции во вторую, но не получаю обратно ни одного alert()
.
$(document).ready(function(){
var var1;
$.ajax({
url: "https://api.ipify.org?format=json",
success: function(response) {
var data = response;
var1 = data.ip;
$('#test').html(var1);
}
});
// I want the var1 to be copied to the second function, to this:
// The alert is for example, but it does not give me anything back
$(function() {
var var2 = var1;
$('#test2').html(var1);
$.ajax({
type: 'get',
url: "http://mywebsite.com/testip?"+var2, // just some query that i need to use with the ip from var1
dataType: "html",
success: function(data) {
alert(var2);
},
});
});
});
Один получает IP, а другой должен отправить запрос по адресу: mywebsite.com/testip?"+var2 с IP. Затем testip.php сохраняет запрос (var2) в текстовый файл. Другого способа сохранить var напрямую в txt файл не нашел
Вы не указали, почему у вас должно быть два готовых документа вместо одного. Ничто из того, что вы сказали, не требует подготовки двух документов.
Пожалуйста, всегда правильно отступать от кода вы публикуете на StackOverlow.
Итак, я должен заменить $ (document) .ready на $ (function () {?
Просто объедините две вещи в один готовый документ. Затем переменная var1 или var2, привязанная к готовому документу, становится доступной для всей вложенной логики.
Или вы можете сделать var1 глобальным, удалив var
, и он будет доступен ниже, но все же в этом случае var var2 = var1
будет работать раньше var1 = data.ip
, потому что ajax займет некоторое время
Во-первых, вы должны объединить ваши документы в один, так как вам нужен только один.
Во-вторых, вы не можете выполнить логику, как вы пытались это сделать. Ajax - это асинхронный. Это означает, что вы должны запустить первый запрос и, прежде чем он завершится, вы также попытаетесь выполнить второй запрос. Поскольку для второго запроса требуются данные из первого ответа, это неверная логика.
Чтобы исправить это, вы можете вызвать второй метод ajax из успеха первого, после чего данные будут доступны для использования во втором запросе ajax.
$(document).ready(function() {
var var1;
$.ajax({
url: "https://api.ipify.org?format=json",
success: function(response) {
var data = response;
var1 = data.ip;
$('#test').html(var1);
//I want the var1 to be copied to the second function, to this:
//The alert is for example, but it does not give me anything back
$('#test2').html(var1);
$.ajax({
type: 'get',
url: "http://mywebsite.com/testip?" + var1, // just some query that i need to use with the ip from var1
dataType: "html",
success: function(data) {
alert(var1);
},
});
}
});
});
Да спасибо. Теперь хорошо работает. Я сначала изучу изменения
Вы не можете «скопировать» локальную переменную в другую локальную переменную, не имеющую общей области видимости. Вы должны переместить одного из них в более высокий прицел, чтобы они оба могли использовать. Однако здесь также возникает вопрос, почему у вас есть два готовых документа, а не только один?
$(document).ready(fn)
и$(fn)
- это фактически одно и то же в jQuery.