2013-12-11 4 views
0

Пытался написать функцию, которая считывает данные из текстового файла. Функция работает нормально, но я хочу прочитать ее данные в другой функции. Может кто-нибудь помочь мне сказать, как вернуть значение у для чтения функции()Функция, не возвращающая значение для другой функции

<!DOCTYPE html> 
<html> 

    <head> 
     <script charset="utf-8" src="jquery-2.0.3.min.js"></script> 
     <script type="text/javascript"> 
      function read() { 
       $.get("version.txt?_ts=" + new Date().getTime(), function (data) { 
        var y1 = parseInt(data[0]); 
        var y2 = parseInt(data[1]); 
        var y = (y1 * 10) + y2; 
        return y; 
       }); 
      } 

      function drr() { 
       var d = read(); 
       document.write(d); 
      } 
     </script> 

     <body onload=read()>not working</body> 

</html> 
+1

возможно дубликат [Как вернуть ответ от вызова AJAX?] (Http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax- звоните) –

+0

Пожалуйста, прочитайте [Как вернуть ответ от вызова AJAX?] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) –

+0

Просто что вы не можете вернуть значение из запроса ajax ... вам нужно использовать обратный вызов ... прочитайте приведенную выше ссылку, чтобы увидеть, как это делается. –

ответ

0

сделать так:

function read() 
    { 

    $.get("version.txt?_ts=" + new Date().getTime(), function(data) { 


    var y1= parseInt(data[0]); 
    var y2= parseInt(data[1]); 
    var y= (y1*10)+y2; 

    document.write(y); /* this is the change, process the result when it's received here */ 

     }); 

    } 

function drr() 
    { 
    read(); 
    } 

также изменить HTML для более правильного синтаксиса

<body unload="read();"> 

обычно, когда у вас есть вызов $ .ajax(), он асинхронный - выполняется запрос и выполняется обработчик успеха, когда запрос является процессом успешно.

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

0

$ .get является функцией асинхронной, нет возврата для функции чтения, необходимо использовать обратный вызов:

function read(callback) { 

    $.get("version.txt?_ts=" + new Date().getTime(), function(data) { 

     var y1 = parseInt(data[0]); 
     var y2 = parseInt(data[1]); 
     var y = (y1 * 10) + y2; 

     callback(y); 
    }); 

} 

function drr() { 

    read(function(txt) { 

     document.write(txt); 
    }); 

} 
+0

Большое спасибо, обратный вызов обработан – Krish

+0

Есть ли способ получить значение txt для функции drr() ? Я должен использовать это значение для рисования графика – Krish

+0

Вы можете назначить txt какой-либо глобальной переменной, если хотите, но вы не можете использовать это, пока не будет установлено значение, правильно? поэтому для рисования графика просто вызовите функцию draw вместо document.write (txt); – Andrew

1

В своем коде вы используете AJAX корыто JQuery:

$.get(url, callback) 

$get метод попадает в url и передает результат методу обратного вызова, он не возвращает его. callback не получает вызывается сразу, из-за AJAX быть асинхронными, а не что-то подобное происходит:

  1. $.get называется
  2. метод read продолжается (выходы в вашем случае, поскольку нет другого кода)
  3. $.get получает ответ от сервера
  4. функция callback вызывается, если сервер удалось с получением данных

В приведенной выше последовательности второй этап может быть заменен любым из шагов после него. Тем не менее, эта последовательность должна показать, что нет связи между , когда метод read завершает и при обработке данных. Итак, если вам нужно что-то сделать с результатом (покажите его на странице), вы должны сделать это внутри метода callback.

Вот отредактированный пример с кодом:

function read() { 

    $.get("version.txt?_ts=" + new Date().getTime(), function(data) { 

     var y1 = parseInt(data[0]); 
     var y2 = parseInt(data[1]); 
     var y = (y1*10)+y2; 

     document.write(y); 
    }); 
} 

В дополнение к асинхронной природы AJAX, есть еще одна проблема с вашим кодом. В вашем методе read вы ожидаете вернуть значение, но на самом деле оно ничего не возвращает. Это означает, что функция drr недействительна.

+0

Спасибо, обратный вызов обработан – Krish

0

Попробуйте это.

function read() { 
      var result=0; 
       $.get("version.txt?_ts=" + new Date().getTime(), function (data) { 
        var y1 = parseInt(data[0]); 
        var y2 = parseInt(data[1]); 
        var y = (y1 * 10) + y2; 
        result=y; 
       }); 
      return result; 
      } 

      function drr() { 
       var d = read(); 
       document.write(d); 
      } 
+0

Значение результата не обновляется. Его печать 0 – Krish

+0

использует $ .ajax с async: false и cache: false. Поскольку get по умолчанию асинхронен, он возвращается до вызова функции success. – Priyank

Смежные вопросы