Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> видимость переменной из $.ajax 
:(
    Опции темы
begin
Дата 15.7.2012, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 415
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Перед отправкой формы посылаю аяксом запрос на сервер, чтобы проверить данные. Php-cкрипт должен отдать либо error либо success. А js в зависимости от полученного ответа решит, что делать дальше:

Код

var ajax_url = 'check.php';
var error_data = '';
$.ajax({
    url: ajax_url,
    success: function(data){
        error_data = data;
        alert (data);
    }
});
var error_check = 1;
if (error_data == 'success') error_check = 0;


С сервера приходит ответ и alert выводит его значение, но проблема в том, что переменной error_data ничего не присваивается - похоже внутри той функции она просто не видна.
Пробовал объявлять эту переменную и так:
Код

var error_data = '';

и так:
Код

error_data = '';

не помогло. Посоветуйте, как и где правильно объявить эту переменную, чтобы все заработало  smile 
PM MAIL   Вверх
Amphiluke
Дата 15.7.2012, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Цитата(begin @  15.7.2012,  05:17 Найти цитируемый пост)
Код

if (error_data == 'success') error_check = 0;

Вы пытаетесь считать значение переменной error_data еще до того как придет ответ от сервера (т.е. до того как будет выполнена callback-функция success) — в силу асинхронности запроса. Так что либо делайте запрос синхронным, либо переносите анализ ответа сервера в ф-цию success.
PM   Вверх
begin
Дата 15.7.2012, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 415
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Понял, включу синхронность в аяксе. А подскажите - переменную я объявляю правильно? или все-же нужно иначе?

именно так нужно?

Код

var ajax_url = 'check.php';
var error_data = '';
$.ajax({
    url: ajax_url,
    success: function(data){
        error_data = data;
        alert (data);
    }
});
var error_check = 1;
if (error_data == 'success') error_check = 0;

PM MAIL   Вверх
Amphiluke
Дата 15.7.2012, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Цитата(begin @  15.7.2012,  20:14 Найти цитируемый пост)
именно так нужно?

А что вас смущает? Стандартное объявление переменной. smile
PM   Вверх
begin
Дата 15.7.2012, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 415
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Спросил потому, что в сети обнаружил противоречивые рекомендации, и мне, как начинающему, трудно в них соориентироваться.
Итак, пишут, что:

1. объявляя глобальную переменную, нужно писать не:
Код

var error_data = '';

а:
Код

error_data = '';



2. обращаться к такой глобальной переменной внутри функции нужно не так:
Код

error_data = data;

а так:
Код

window.error_data = data;

PM MAIL   Вверх
Amphiluke
Дата 15.7.2012, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Цитата(begin @  15.7.2012,  23:00 Найти цитируемый пост)

Итак, пишут, что:

1. объявляя глобальную переменную, нужно писать не
Код
var error_data = '';

а:
Код
error_data = '';



Это заблуждение. Переменные объявляются только при помощи ключевого слова var. Если вы не используете var, то это не объявление переменной, а создание свойства глобального объекта. Отличие в том, что истинные переменные обладают внутренним свойством, запрещающим их удаление оператором delete, а также истинные переменные участвуют в таком процессе как «поднятие» (hoisting). Конкретнее, переменные, созданные с помощью var, становятся свойством объекта переменных.
Для «переменных», объявленных без var, эти утверждения уже не справедливы.

Цитата(begin @  15.7.2012,  23:00 Найти цитируемый пост)
2. обращаться к такой глобальной переменной внутри функции нужно не так

Код

error_data = data;


а так

Код

window.error_data = data;



Это опять же из-за непонимания отличий между глобальной переменной и свойством глобального объекта (на который ссылается window). Вы можете обращаться к глобальным переменным (истинным переменным, объявленным при помощи var) через window, благодаря тому, что глобальный объект сам для себя является объектом переменных.
PM   Вверх
begin
Дата 15.7.2012, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 415
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Благодарю за такой подробный ответ  smile 

Цитата

Вы можете обращаться к глобальным переменным (истинным переменным, объявленным при помощи var) через window

правильно ли я понял: могу в качестве второго способа, но и напрямую внутри функции я тоже могу обратиться к этой переменной, да?


Код

var some_var = 'проверка!';
$.ajax({
    url: ajax_url,
    success: function(data){
        alert (some_var);//выдаст "проверка!"
    }
});


PM MAIL   Вверх
Aliance
Дата 16.7.2012, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



begin, если говорить кратко и не вдаваясь в ньюансы, то объявление переменных без ключевого слова var в книжках обычно подразумевает создание переменной с глобальной областью видимости внутри функции со своей областью видимости. Поясню на примере:
Код

var myvariable;
function myfunction() {
   myvariable = 'ololo';
}
myfunction();
alert(myvariable); // ololo

идентичен такому коду:
Код

function myfunction() {
   var myvariable = 'ololo';
}
myfunction();
alert(myvariable); // ololo

Но зато сл. код выдаст ошибку

Код

function myfunction() {
   var myvariable = 'ololo';
}
myfunction();
alert(myvariable); // undefined variable

PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.