2012-07-31 55 views
2

我有一個JavaScript函數從PHP獲取一些JSON。當我得到JSON時,我的計劃是解析它並將其加載到一個數組中,然後返回該數組,以便我可以在任何地方使用這些數據。返回javascript數組不工作

這是AJAX功能:

function get_ajax(route_val){ 

$.ajax({ 
      url: "ajax.php", 
      dataType: 'json', 
      data: { 
       route: route_val 
     }, 
      success: function(result) { 
       if(result.error == true){ 
        alert(result.message); 
       }else{ 

        $.each(result, function(key1, value1){ 

         //console.log(key1 + ":" + value1); 

         returnarray[key1] = value1; 

        });    

        return returnarray; 
       } 

      } 
     }); 


} 
</script> 

如果我再嘗試定義說VAR ARR = get_ajax( '1'),編曲將是空的。我可以從函數內部的數組中alert和console.log東西,但返回它什麼也不返回。

它似乎並不存在於函數之外。

任何想法?

回答

6

您使用Ajax不正確,思路是不是有它return任何東西,而是將數據移交給一種叫做callback函數,它處理的數據。

IE:

function handleData(responseData) { 
    // do what you want with the data 
    console.log(responseData); 
} 

$.ajax({ 
    url: "hi.php", 
    ... 
    success: function (data, status, XHR) { 
     handleData(data); 
    } 
}); 

return荷蘭國際集團在提交處理任何事情都不會做,而是必須要麼手頭寬裕的數據,或者你直接要如何處置它成功函數內。

+0

謝謝,我甚至不知道。一直在試圖找出爲什麼現在它在移動,我的ajax中沒有工作。 – user3210416 2014-05-21 14:59:40

3

問題是,您的成功功能不會將您的數組返回到任何地方。你需要做的是在成功處理器內部完全處理你的數據,或者調用另一個方法/函數來完成需要的事情。

可以想像它可能是這個樣子:

success: function(result) { 
    if(result.error == true){ 
     alert(result.message); 
    }else{ 
     $.each(result, function(key1, value1){ 
      returnarray[key1] = value1; 
     }); 
     //Something like this 
     ajaxHandlers.handleReturnedArray(returnarray); 
    } 
} 
0

如果你絕對想擁有它返回的東西,你可以做一個同步的請求(儘管它不是AJAX的點(異步 JavaScript和XML ))。

function get_ajax(route_val){ 

    var returnarray = []; 

    $.ajax({ 
     url: "ajax.php", 
     dataType: 'json', 
     async: false, 
     data: { 
      route: route_val 
    }, 
     success: function(result) { 
      if(result.error == true){ 
       alert(result.message); 
      }else{ 

       $.each(result, function(key1, value1){ 
        returnarray[key1] = value1; 

       });    

      } 
     } 
    }); 

    return returnarray; 
}