2015-05-07 42 views
0

我必須在文本框中鍵入一些關鍵字服務器返回該JSON格式:如何訪問自動完成選擇時返回的JSON值?

[{"id":1,"value":"some string!"}] 

,我想,當用戶選擇一個項目,使用瀏覽器選擇的id導航到另一個頁面;它存在於返回的JSON中。這是我的自動完成代碼:

$(function() { 

$("#search-box").autocomplete({ 
    source: function (request, response) { 
     $.ajax({ 
      type: "GET", 
      url: "../Contenthandler/Search.ashx", 
      dataType: "json", 
      data: 'query=' + request.term, 
      success: function (data) { 
       response($.map(data, function (item) { 
        return { label: item.value }; 
       }) 
     ); 

      } 
     }); 
    }, 
    minLength: 3, 
    open: function() { 
     $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); 
    }, 
    close: function() { 
     $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); 
    }, 
    select: function (event, ui) { 
     if (ui.item) { 
      window.location.href = "../ControlPanel.aspx?id=" + ui.item.id; 
     } 
    } 
}); 

}); 

ui.item.idundefined。如何在選擇活動中訪問id(1)?

+0

根據你的JSON結果例如,最外的數據元素是一個數組。所以你需要在這一點上引用數組符號。 – Taplar

+0

@Taplar so,如何訪問'id'? –

+0

您是否收到回覆?換句話說,你的'成功'處理程序曾經被稱爲? @Totlar的觀點是結果對象* isnt json *,但是你的ajax調用期望得到一個json響應。 – wahwahwah

回答

1

您沒有id作爲您映射到傳遞給您的ajax成功內的自動完成數組的對象的屬性。

您的物品只有一個物業label。添加您需要的其他屬性,或只是與label財產

response($.map(data, function (item) { 
     return { label: item.value, id : item.id };// add "id" property 
    }); 

其實如果從服務器返回的數據是在問題的頂部結構...你不需要做任何映射擴展您的響應對象。你真的不需要你自己的ajax,並且可以直接將服務器路徑連接到插件。

查看演示和文檔用於設置URL路徑作爲源