Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как ajax запрос присвоить переменной (https://javascript.ru/forum/jquery/16335-kak-ajax-zapros-prisvoit-peremennojj.html)

zeraid 04.04.2011 15:03

Как ajax запрос присвоить переменной
 
Вот есть код

setInterval(function() {

$.ajax({
   type: "POST",
   url: "/mnemo_1.php",
   //data: "func=1",
   dataType: "text",
   success: function (data){data;},
   error: function(){alert('Problem');}
 })
}, 3000);

var s1 = new draw2d.Server("any_pkey1", [B]data[/B],"up"); 
	 workflow.addFigure(s1, 100,100);},


как мне аякс запрос присвоить переменноый и чтоб она выводилась в об
ъекте s1.

micscr 04.04.2011 15:12

Вот там где у тебя data так скромненько спряталась и ничего не делает:
success: function (data){data;//<--

вот там и надо ее использовать.

zeraid 04.04.2011 15:48

Цитата:

Сообщение от micscr (Сообщение 99207)
Вот там где у тебя data так скромненько спряталась и ничего не делает:
success: function (data){data;//<--

вот там и надо ее использовать.

нет. вопрос был как присвоить переменной аякс запрс. ибо мне надо чтобы все что выдает запрос раз в 3 секунды хранилось в переменной. а ее я уже куда хочу вставляю. То етсь значение это пременно должно менятся раз в 3 сек.

micscr 04.04.2011 16:24

Что значить присвоить переменной аякс запрос?
Переменная это - переменная, аякс запрос - это процесс. Если не знаешь как этот процесс работает, то изучай.
Основы javascript также подтяни скорее всего(т.к. некаешь на мой первый ответ, очевидно основ не знаешь)

zeraid 04.04.2011 17:14

понятно. на этом форуме как всегда народ толи делает вид что непонимает толи вообще не в тему отвечает.

спасибо.

zeraid 04.04.2011 18:14

Я имею в виду как мне вытащить ту переменную data за рамки аякс запроса. Присваивание другой переменной не помогает. Как мне вытащить эту переменную?? у меня нет возмонжости засунуть весь код в функцию data ибо в этом случае объекты будут создаватся тоже раз в 3 сек.

zeraid 04.04.2011 18:40

разобрался. вот так работает:

//setInterval(function() {
var data1 = $.ajax({
   type: "POST",
   url: "/mnemo_1.php",
   //data: "func=1",
   dataType: "text",
   async: false,
   success: function (data){data;},
   error: function(){alert('Problem');}
 }).responseText;
//}, 3000);

       var s1 = new draw2d.Server("any_pkey1", data1,"up"); 
	 workflow.addFigure(s1, 100,100);


НО стоут убрать комментирование как он выводит просто число 2. В общем как мне сделать чтобы аякс запрос делался раз в 3 сек.

melky 04.04.2011 19:52

setInterval
?

zeraid 04.04.2011 19:55

Цитата:

Сообщение от melky (Сообщение 99269)
setInterval
?

Я же написал что если оставить сетинтервал то он будет ругатся на переменную data1. Почему то все что стоит под сетинтервалом он дальше не видит....

zeraid 04.04.2011 19:58

Более того, что если сделать вот так (то есть присвоить функцию переменной:

var data1 = function zapros(){$.ajax({
   type: "POST",
   url: "/mnemo_1.php",
   //data: "func=1",
   dataType: "text",
   async: false,
   success: function (data){ var data;},
   error: function(){alert('Problem');}
 }).responseText;};



ТО он будет выводить текст функции....

melky 04.04.2011 20:17

Цитата:

Сообщение от zeraid (Сообщение 99260)
разобрался. вот так работает:

setInterval(function() {
var data1 = $.ajax({
   type: "POST",
   url: "/mnemo_1.php",
   dataType: "text",
   async: false,
   success: function (data){data;},
   error: function(){alert('Problem');}
 }).responseText;
}, 3000);

       var s1 = new draw2d.Server("any_pkey1", data1,"up"); 
	 workflow.addFigure(s1, 100,100);


function loop( callback ){

var t = setInterval(function(){
   
d = $.ajax({

   type: "POST",
   url: "/ajax.html", // локальный файл, там текст "GOOD"
   dataType: "text",
   async: false,
   data: { func: 1 }

  
 }).responseText;

callback( d );

},1000);

this.stop = function(){ clearInterval(t); }

};//l


var t = new loop( console.log ); 


setTimeout( function(){t.stop();},3000) // через 3 сек остановка


в консоли выводит GOOD три раза

тут не могу запустить (скрипты запускается в ифрейме и на testbin)

еще так




function loop( callback ){

var t = setInterval(function(){
   
$.ajax({

   type: "POST",
   url: "/ajax.html", // локальный файл, там текст "GOOD"
   dataType: "text",
   async: false,
   data: { func: 1 },
   error: function(){alert('Problem');},
   success : function(data) { callback(data); }

  
 }).responseText;

},1000);

this.stop = function(){ clearInterval(t); }

};//l


var t = new loop( console.log ); 


setTimeout( function(){t.stop();},3000) // через 3 сек остановка


результаты одинаковые

zeraid 04.04.2011 21:27

Цитата:

Сообщение от melky (Сообщение 99277)
function loop( callback ){

var t = setInterval(function(){
   
d = $.ajax({

   type: "POST",
   url: "/ajax.html", // локальный файл, там текст "GOOD"
   dataType: "text",
   async: false,
   data: { func: 1 }

  
 }).responseText;

callback( d );

},1000);

this.stop = function(){ clearInterval(t); }

};//l


var t = new loop( console.log ); 


setTimeout( function(){t.stop();},3000) // через 3 сек остановка


в консоли выводит GOOD три раза

тут не могу запустить (скрипты запускается в ифрейме и на testbin)

еще так




function loop( callback ){

var t = setInterval(function(){
   
$.ajax({

   type: "POST",
   url: "/ajax.html", // локальный файл, там текст "GOOD"
   dataType: "text",
   async: false,
   data: { func: 1 },
   error: function(){alert('Problem');},
   success : function(data) { callback(data); }

  
 }).responseText;

},1000);

this.stop = function(){ clearInterval(t); }

};//l


var t = new loop( console.log ); 


setTimeout( function(){t.stop();},3000) // через 3 сек остановка


результаты одинаковые

не очень понел что вы этим хотели сказать.... я тут вижу то, что вы просто сдлелали чтобы через 3 сек запрос прекращался..... у меня же проблема описанная выше.

melky 04.04.2011 22:16

:-E

развернуть ->
function loop( callback ){


/* интервал */
var t = setInterval(function(){ 
   
d = $.ajax({

   type: "POST",
   url: "/ajax.html", // локальный файл, там текст "GOOD"
   dataType: "text",
   async: false,
   data: { func: 1 }

  
 }).responseText;

callback( d );

},1000);

/* 

каждую секунду будем отправлять запрос на файл И вызывать указанную в callback функцию

*/

this.stop = function(){ clearInterval(t); }

};//l



var t = new loop( console.log );  
// если сохраним t, сможем прекратить вызовы этим -> t.stop()


или вот, заинлайненная функция

развернуть ->
/*
 каждую секунду берет файл с сайта и делам с содержимым , что хотим
*/

var t = setInterval(function(){
   
$.ajax({

   type: "POST",
   url: "/ajax.html", // локальный файл
   dataType: "text",
   async: false,
   data: { func: 1 },
   error: function(){alert('Problem');},
   success : function(data) { 

          /* делаем,что хотим ! в data результат запроса*/
            alert(data);
   }

  
 });

},1000);


/* остановить повтор */
clearInterval(t);

zeraid 04.04.2011 22:26

Мне кажется вы меня не поняли. Объясню подробнее.

вот код (сюда ваш внедрил уже):

function loop( callback ){
var t = setInterval(function(){
$.ajax({
   type: "POST",
   url: "/mnemo_1.php",
   //data: "func=1",
   dataType: "text",
   async: false,
   success: function (data){callback(data);},
   error: function(){alert('Problem');}
 }).responseText;},1000);

this.stop = function(){ clearInterval(t); }

};//l

var t = new loop( console.log );
setTimeout( function(){t.stop();},3000)

  var s1 = new draw2d.Server("any_pkey1", СЮДА НАДО ВСТАВИТЬ ПЕРЕМЕННУЮ ИЗ AJAX,"up"); 
	 workflow.addFigure(s1, 100,100);


у меня создается объект в котором высвечивается температура, которая берется из аякс запроса. И мне надо чтобы она бралась каждые 3 секунды и выводилась в обект. ВНУТРЬ SUCCESS вставить судя по всему не выйдет ибо вместе с запросом будет создаватся еще один объект и тд.

И мне хотелось бы узнать как это можно реализовать ибо в JS я пока что не силен.

melky 04.04.2011 22:50

Цитата:

Сообщение от zeraid (Сообщение 99294)
Мне кажется вы меня не поняли. Объясню подробнее.

вот код (сюда ваш внедрил уже):

function loop( callback ){
var t = setInterval(function(){
$.ajax({
   type: "POST",
   url: "/mnemo_1.php",
   //data: "func=1",
   dataType: "text",
   async: false,
   success: function (data){callback(data);},
   error: function(){alert('Problem');}
 }).responseText;},1000);

this.stop = function(){ clearInterval(t); }

};//l

var t = new loop( console.log );
setTimeout( function(){t.stop();},3000)


у меня создается объект в котором высвечивается температура, которая берется из аякс запроса. И мне надо чтобы она бралась каждые 3 секунды и выводилась в обект. ВНУТРЬ SUCCESS вставить судя по всему не выйдет ибо вместе с запросом будет создаватся еще один объект и тд.

у вас создается объект, который принимает число. через аякс надо обновлять это число.

самый лучший способ ( для обновления переменной) - это написать метод update() внутри объекта,который принимает число.

потом через ajax-success вызывать update с parseInt(date) в качестве аргумента.

или же каждый раз создавать новый объект

setInterval(function(){
   
$.ajax({

   type: "POST",
   url: "/ajax.html", // локальный файл
   dataType: "text",
   async: false,
   data: { func: 1 },
   error: function(){alert('Problem');},
   success : function(data) { 

         var s1 = new draw2d.Server("any_pkey1", data,"up"); 
	 workflow.addFigure(s1, 100,100);
   }

  
 });

},1000);



откуда у вас этот объект?

zeraid 04.04.2011 22:56

Цитата:

Сообщение от melky (Сообщение 99298)
у вас создается объект, который принимает число. через аякс надо обновлять это число.

самый лучший способ ( для обновления переменной) - это написать метод update() внутри объекта,который принимает число.

потом через ajax-success вызывать update с parseInt(date) в качестве аргумента.

или же каждый раз создавать новый объект

setInterval(function(){
   
$.ajax({

   type: "POST",
   url: "/ajax.html", // локальный файл
   dataType: "text",
   async: false,
   data: { func: 1 },
   error: function(){alert('Problem');},
   success : function(data) { 

         var s1 = new draw2d.Server("any_pkey1", data,"up"); 
	 workflow.addFigure(s1, 100,100);
   }

  
 });

},1000);



откуда у вас этот объект?

Рад что наконец вы меня поняли.

draw2d.Server это просто картинка над которой пишется число. Если сделать так, как вы написали выше. То с каждым аякс запросом будет добавляться еще один объект.

Внутри объекта писать обновление числа не вариант ибо объектов у меня много и более того обновление числа для ВСЕХ объектов должно протекать в одном аякс запросе. Но пока я пытаюсь справится хоть с одним.

У меня звучал вопрос выше КАК мне ИЗ аякс запроса вывести то самое число которое он получает и просто подставить в свойства объекта draw2d.Server("any_pkey1", ВОТ СЮДА,"up");

Или как написать сам аякс запрос.

Скорее всего я не владею некоторыми операциями JS - поэтому я задал вопрос здесь.

micscr 05.04.2011 08:46

Цитата:

Сообщение от zeraid
Скорее всего я не владею некоторыми операциями JS

и не говори ;) Про переменные почитай, области видимости, глобальные переменные, ответ аякс-запроса. Сначала то есть, как я и советовал ...

zeraid 05.04.2011 13:31

Цитата:

Сообщение от micscr (Сообщение 99329)
и не говори ;) Про переменные почитай, области видимости, глобальные переменные, ответ аякс-запроса. Сначала то есть, как я и советовал ...

об этом я в курсе. я имею в виду что могу не знать некооторые функции и тп ибо норм документации по JS нет нигде.

zeraid 05.04.2011 13:49

var t = "";

setInterval(function(){
$.ajax({
   type: "POST",
   url: "/mnemo_1.php",
   //data: "func=1",
   dataType: "text",
   async: false,
   success: function (data){data; t = data;},
   error: function(){alert('Problem');}
 }).responseText;},1000);


я имею в виду что-то в роде этого. То есть чтобы значение из аякса записалочь в t.

zeraid 05.04.2011 14:16

function test(){ 
    var t; 
$.ajax({
   type: "POST",
   url: "/mnemo_1.php",
   //data: "func=1",
   dataType: "text",
   async: false,
   success: function (data){t = data;},
   error: function(){alert('Problem');}
 }).responseText;

 return t; 

}; 

var t = test();

       var s1 = new draw2d.Server("any_pkey1", t,"up"); 
	 workflow.addFigure(s1, 100,100);


вот так заработало. Очень удивлен почему тоже самое не работало без использования функции.

Осталось одно - сделать тож самое раз в 3 секунды.

Никак не получается это реализовать. Прошу помощи.

zeraid 06.04.2011 01:16

Ну что неужели никто не подскажет как??

zeraid 06.04.2011 19:29

Народ ну так как это реализовать. Если сетинтервал ставить поверх функции, то в том месте где должно быть число он будет писать Undefined ибо когда программа первый раз прочитывает файл, то в переменную еще ничего не упевает записатся. ВТорой же раз программа естественно не будет проходить по файлу. так как же тогда быть?

korolariya 07.03.2013 16:25

function ajaxf(indata,outdata,url){

//загрузка результата
ajax=getAjax();
var param;


if (ajax != null) {
// метод POST, указываем просто имя файла
ajax.open("POST","index.php?task="+url,true);

// если параметров несколько, то они разделяются &
param=indata;


// добавляем стандартный заголовок http
// посылаемый через ajax
ajax.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");

// вроде эти могут тормозить
ajax.setRequestHeader("Content-length", param.length);
ajax.setRequestHeader("Connection", "close");

ajax.onreadystatechange = function(){
if(ajax.readyState==4 && ajax.status==200)
// document.getElementById(outdata).innerHTML=ajax.re sponseText;
return ajax.responseText;
}

// посылаем наши данные или пустую строку (param="")
// главное не null
ajax.send(param);
}
}
А как тут передать в переменную

danik.js 08.03.2013 12:48

Цитата:

Сообщение от zeraid
async: false

Так оно же тупить будет. Или пофег?
Цитата:

Сообщение от zeraid
Осталось одно - сделать тож самое раз в 3 секунды.

По завершению запроса (в success) запускать таймер на 3 секунды через setTimeout(funcToRun, 3000). Или просто использовать setInterval, примеры кода уже давали. Что использовать - зависит от задачи.


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