2011-06-03 232 views
0

我正在使用.getJSON向我的PHP服務器發送搜索查詢,並返回一個已被json_encode'd數組。我希望在jQuery函數完成後使用生成的對象(理想情況下,將其推入數組中,並像使用頁面中其他任何對象一樣使用它)。jQuery中的持久化.getJSON()

但是,函數完成後對象不再存在這是成功的:

var widgets = new Array(); 

    $.getJSON('/server.php', {query: search.value}, function(response) { 
    widgets.push(response); 
    alert('value of result's attribute1 is ' + widgets[widgets.length].attribute1); 
    }); 

但是當我離開的功能,widgets.push [長度]變爲零,我無法訪問有關push'ed對象什麼,我覺得這個會。是一個副本,而不是一個參考?

我的應用程序涉及用戶做幾個這些搜索,以創建一個小部件列表, n在每個對象的屬性之間工作。在函數完成後是否有一種可接受的方式來使此數據持久化?

+0

什麼是'widgets'的範圍是什麼?是否(以及你在另一個函數中調用'getJSON'?試着在'widgets = new Array()'前面放上'var';這將確保你正在創建一個全局變量(只要'widgets' isn在外部範圍內聲明 – josh3736 2011-06-03 01:59:54

+0

對不起,應該已經解釋 - widgets是全局的,第一個聲明在

1

我認爲你正在檢查數組的錯誤索引。

widgets[widgets.length - 1] 

它可能是其他的東西......但這可能是它。

+0

這是對的 - 索引也是錯誤的。在我的轉錄錯誤。 – Ryan 2011-06-03 02:21:36

0

建立一個「小」小部件,到JSONP結果(Widget內容)加載到小工具容器所需....

這對我的作品....啊一啊二,啊三防和四個....

  1. 全局 「陣列」 可變

    var widgetContents = []; 
    
  2. 的JSON請求....

    $.getJSON(jsonp_url, function(results) { 
        $.each(results, function(i, value) {      
        widgetContents[i] = value;       
    
        // console.log(i + " => " + value); 
        }); 
         var success = true;          
    }); 
    
  3. 調試或發現問題...

    if (widgetContents.length == 0 || success != true) { 
        alert("Opps... something went wrong in the backroom...."); 
    } 
    
  4. 處理結果....

    else { 
         $.each(widgetContents, function(index, value) {       
          $('#' + contentsID).append(value); 
    
          /* or whatever you need to do.... */      
         }); 
    }