从Ajax函数返回值

问题描述:

我试图创建一个文本块,当文本从Json字符串更改时将自动更新。从Ajax函数返回值

基本上我开始与:

function streamSong(index) { 
     if (!isUndefined(myPlaylist[index].title)) 
      return myPlaylist[index].title; 
     else return ''; 
    } 

然后修改它看起来像这样:

function streamSong(index) { 
     var currentSongName = 'here'; 
     if (!isUndefined(myPlaylist[index].title)) { 
         var intervalFunc = function(){ 
          var jsonData = null; 
          $.ajax({ 
          url: 'http://www.thesite.com/pullJson.php?stream=rapstation', 
          dataType: "json", 
          data: { get_param: 'employees' }, 
          success: function (data) { 
           currentSongName = 'now here'; 
          }, 
          error: function (data) { 
           currentSongName = 'not working'; 
          } 
          }); 
         }; 
         setInterval (intervalFunc, 60000); 
         setTimeout (intervalFunc, 1); 
         return currentSongName; 
     } 
     else return 'no title'; 
    } 

第一个功能发射了罚款,并返回我的数据流标题。 第二个函数触发,但我永远不能修改currentSongName的值。

我对JavaScript和ajax还是有点新东西,所以原谅我的无知,但我显然希望最终将currentSongName的值设置为我检索的Json值,但现在我只希望它能够更改定时器上的值。

我对这一切都错了吗?

+0

检查[这](HTTP ://stackoverflow.com/questions/27509/detecting-an-undefined-object-property)了解如何检查未定义的变量。 – D4V1D 2015-04-03 19:58:56

+0

我有点失落,你想告诉我什么。我知道我的varriable有一个值,因为我将该值设置在该函数的顶部: var currentSongName ='here'; 然后在底部,(在ajax调用之外)我返回currentSongName。 我回来并显示在我的网页上的是'这里'。 但正如你可以看到我试图改变它的价值取决于如果ajax调用成功或者如果有错误。 – Klutch 2015-04-03 20:03:06

+0

重复http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call – 2015-04-03 20:08:21

该变量修改得很好,但为时已晚。 AJAX调用是异步的,因此该变量用于在赋值之前返回值。

您将使用回调来处理结果。与原来的代码就应该是这样的:

function streamSong(index, callback) { 
    if (!isUndefined(myPlaylist[index].title)) { 
     callback(myPlaylist[index].title); 
    } else { 
     callback(''); 
    } 
} 

用法:

streamSong(42, function(title) { 
    // do what you want with the title 
}); 

对于AJAX调用回调将用于这样的:

function streamSong(index, callback) { 
    var currentSongName = 'here'; 
    if (!isUndefined(myPlaylist[index].title)) { 
     var intervalFunc = function(){ 
      var jsonData = null; 
      $.ajax({ 
       url: 'http://www.thesite.com/pullJson.php?stream=rapstation', 
       dataType: "json", 
       data: { get_param: 'employees' }, 
       success: function (data) { 
        callback('now here'); 
       }, 
       error: function (data) { 
        callback('not working'); 
       } 
      }); 
     }; 
     setInterval (intervalFunc, 60000); 
     setTimeout (intervalFunc, 1); 
    } else { 
     callback('no title'); 
    } 
}