Я не знаю, что не могу получить доступ к значениям переменной в Javascript.
urli
имеет такие значения, как: https://cors.io/?https://tb.rg-adguard.net/php/get_edition.php?version_id=11&lang=name_en
Но я попытался распечатать значения name_lang
с помощью console.info(this.namelang)
, но он показывает undefine
Вот мой код:
var urli = 'https://cors.io/?https://tb.rg-adguard.net/php/get_edition.php?version_id=' + version_id + "&lang = " + namelang;
$.ajax({
type: "GET",
url: urli,
dataType: 'json',
success: function(response){
var options = '';
console.info(this.namelang);
$.each(response.editions, function() {
options += '<option value = "' + this.edition_id + '" style = "color: ' + this.color + '">' + this.namelang + '</option>';
});
$('#edition_id').html('<option value = "0">- ' + seledition + ' -</option>'+options);
$('#edition_id').attr('disabled', false);
$('#language_id').html('<option>- ' + sellanguage + ' -</option>');
$('#language_id').attr('disabled', true);
$('#arch_id').html('<option>- ' + selachitecture + ' -</option>');
$('#arch_id').attr('disabled', true);
}
});
@brk urli
правильный. Вы пробовали его загрузить? Он работает нормально
console.info (this.namelang); не должно быть console.info (response.namelang)?
namelang
только параметр в URL
Если это должна быть та же переменная, что и в URL-адресе, то это просто console.info(namelang)
без this.
перед ним.
namelang
- это name_en
в случае, если язык английский. namelang
изменится на name_fr
, если язык - Франция. Существовал ли javascript, чтобы метод выглядел как получение первых столбцов в этом массиве?
но namelang находится внутри объекта (того же объекта, где выполняется вызов ajax)? тогда вам нужно будет сделать this = this перед вводом вызова ajax, а затем сделать это. namelang
Вы уверены, что у вас в ответе namelang
???
Я не вижу namelang
, когда проверял URL.
Ниже приведен ответ от urli
.
{
"editions": [
{
"name_en": "Windows 8.1 Pro + Core",
"color": "green",
"edition_id": "960032"
},
{
"name_en": "Windows 8.1 Pro N + Core N",
"color": "green",
"edition_id": "960033"
}
]
}
После того, как я правильно понял ваши требования, я пришел к решению. Вы не знаете, как будет называться язык, это может быть name_en
или name_fr
, но name_
будет обычным. Верно? Если ДА, то решение ниже:
Фрагмент рабочего кода здесь:
let response = {"editions":[{"name_en":"Windows 8.1 Pro + Core","color":"green","edition_id":"960032"},{"name_en":"Windows 8.1 Pro N + Core N","color":"green","edition_id":"960033"}]};
$.each(response.editions, function() {
console.info(this.edition_id);
console.info(this.color)
let keysArr = Object.keys(this);
let langname = "name_";
for (var key in this) {
if (key.substring(0, langname.length) === langname) {
console.info(this[key]); // your desired value
}
}
});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Привет, результат такой же. this.namelang = undefine
.
namelang
только параметр в url
да. это должен быть console.info(this.name_en)
. Но при другом языке. Эти столбцы выглядят так: name_the_country_code
.
namelang
- это name_en
в случае, если язык английский. namelang
изменится на name_fr
, если язык - Франция. Существовал ли javascript, чтобы метод выглядел как получение первых столбцов в этом массиве?
Большое спасибо. Ты восхитителен!
Это потому, что this
внутри этого обратного вызова - это просто объект JQuery xhr, как показано здесь:
Объект response
содержит то, что вы хотите. Но namelang
не внутри этого. В приведенном вами примере URL-адреса есть массив из двух объектов JSON.
Чтобы получить доступ, скажем, к color
первого объекта, вы должны взять response[0].color
.
значение
urli
неверно, есть дваhttps
в одном URL-адресе