Область видимости переменной

Den1xxx

Разрушитель (V)
Сообщения
126
Симпатии
69
Баллы
1 016
Внутри функции есть такой код отправки данных на сервер и получение ответа:
JavaScript:
var json={};
$.post("index.php", {
    view_order:true,
    order_number:number
})
.done(function(data) {
    json = JSON.parse(data);
    console.log(json.content);
});
и вот после этого кода переменная «json» не определена.
Я думал, что если ДО вызова функции $.post() определить «var json», то этой переменной можно будет присвоить значение внутри $.post() и потом успешно применить где-то.
Но видимо я ошибаюсь, только не пойму где. Помогите, буду благодарен!
 
Внутри функции есть такой код отправки данных на сервер и получение ответа:
JavaScript:
var json={};
$.post("index.php", {
    view_order:true,
    order_number:number
})
.done(function(data) {
    json = JSON.parse(data);
    console.log(json.content);
});
и вот после этого кода переменная «json» не определена.
Я думал, что если ДО вызова функции $.post() определить «var json», то этой переменной можно будет присвоить значение внутри $.post() и потом успешно применить где-то.
Но видимо я ошибаюсь, только не пойму где. Помогите, буду благодарен!
а может так надо..
var json=();

у меня вот так в коде....
var elements = getChildAll(obj);

Код:
 var elements = getChildAll(obj);
    if(elements.length<1){
        obj.remove();
        return;
    }else{
        for(var i=0;i<elements.length;i++)
        {
            try{
                if(elements[i].parent.typename!="Layer")elements[i].moveBefore(obj);
                if(elements[i].typename=="GroupItem")ungroup(elements[i]);
 
а может так надо..
var json=();
Это синтаксическая ошибка, непонятно, что вы имели в виду.
JavaScript:
var json={}; //Создаем пустой объект
var json=[];//Создаем пустой массив
А вот у вас неизвестно что: ожидается выражение внутри скобок? или функцию хотели сделать?
Я решил вопрос пока таким образом: написал код внутри «done» в отдельную функцию и вызвал её, так оно работает.
Проблема тут явно в области видимости, я не догоняю почему не видно и хочу это выяснить.
Уточню, даже так. Может, ранее неточно объяснил, хз.
JavaScript:
    var json;
$.post("index.php", {
    view_order:true,
    order_number:number
})
.done(function(data) {
    json = JSON.parse(data);
    //console.log(json.content); //json: тут всё есть
    var o_form ='<h4>Текст заказа</h4>'+
                '<form action="" method="post">'+
                '<input type="hidden" name="edit_order_number" value="'+number+'">'+
                '<textarea name="edit_order_text" cols="35" rows="15">'+
                json.content+
                '</textarea>'+
                '<br/>'+
                '<input type="submit" value="Сохранить">'+
                '</form>';   
    view_modal('Просмотр заказа '+number,o_form);
});
console.log(json);//json: undefined
Вот где комментарии мои — json: и результат, почему так?
 
Последнее редактирование:
Странный код.
Вы объявили переменную json и потом выводите ее через console.log(json), хотя ничего над ней не делали.
То, что в done() будет выполнено после того, как отработает console.log(json).
 
То, что в done() будет выполнено после того, как отработает console.log(json).
Во, вот именно в этом скорее всего дело. Я привык к однопоточности, но тут видимо всё асинхронно работает?
Я переменную объявил глобально, чтобы потом «забрать» данные из функции. А она видимо пока не дождется ответа, не сработает.
 
Я привык к однопоточности, но тут видимо всё асинхронно работает?
Не асинхронно, а событийно, то есть по событиям.
Если нужно сделать с json после done(), нужно создать фунцию и вызвать ее в done() там, где надо.
 
Не асинхронно, а событийно, то есть по событиям.
Если нужно сделать с json после done(), нужно создать фунцию и вызвать ее в done() там, где надо.
ну я так и сделал, написал view_modal() функцию и передал ей всё.
после PHP логика немного другая)
 
Назад
Верх