簡體   English   中英

jQuery綁定鍵值對

[英]jquery binding a key value pair

嗨,我在應用程序中使用spring mvc。 該服務返回一個json響應,例如,

[{"Key1": "value1"}]

我只需要將響應中的值部分綁定到jquery對話框中的下拉列表中。 我使用AJAX調用來獲取項目列表並進行綁定。 但是它將綁定下拉列表中的整個行,而不是值。

我用於綁定響應的代碼是:

<script type="text/javascript">
$(function() {
    $.ajax({
        type : "GET",
        url : "countries/getname",
        contentType : "application/json; charset=utf-8",
        dataType : "json",
        success : function(msg) {
            alert("MSG:"+msg);//this gives {"Key1": "value1"}
            $.each(msg,function(key, val) {
                alert("KEY::"+key); //key is returned as 0
                alert("VALUE::"+val); //value is returned as{"Key1": "value1"}
                $('<option />', {value: key, text: val}).appendTo("#sampleResp");
            });
        },
        error : function() {
            $("#sampleResp").get(0).options.length = 0;
            $("#sampleResp").get(0).options[0] = new Option("None", "None");
        }
    });
});
</script>

值字段是項,其格式如下: { "Key1": "value1"} SampleResp是下拉列表的ID。

jsp代碼如下所示:

<div>
    <form:select path="sampleResp" cssClass="w200">                     
    </form:select>
</div>

如何僅從響應中提取值部分,然后使用jquery中的ajax調用將其綁定到下拉列表中?

工作jsFiddle演示

如果在警報中得到此結果:

alert(msg);
// {"Key1": "value1"}

這意味着您來自服務器的響應為string ,因此您必須將其解析為JSON:

msg = JSON.parse(msg);
alert(msg);
// [object Object]

現在,您代碼的另一部分是正確的:

$.each(msg,function(key, val) {
    $('<option />', {value: key, text: val}).appendTo("#sampleResp");
});

因此,您的代碼如下所示:

$(function() {
    $.ajax({
        type : "GET",
        url : "countries/getname",
        contentType : "application/json; charset=utf-8",
        dataType : "json",
        success : function(msg) {
            msg = JSON.parse(msg);
            $.each(msg,function(key, val) {
                $('<option />', {value: key, text: val}).appendTo("#sampleResp");
            });
        }
    });
});

您正在傳遞消息中的對象數組。

您為什么不直接發送地圖,因為這些值僅在{ key1:"value1", key2:"value2"}

這樣您就可以訪問像這樣的值

$.each( msg, function(k, v)
{
   alert( "Key: " + k + ", Value: " + v );
});

我無法測試此代碼,因為您沒有提供足夠的信息(#sampleResp是什么?Option是什么?msg是什么?)

我的猜測是:

new Option(item[0]);

如果不起作用,請提供console.log(msg)的信息

JavaScript具有eval()函數,該函數將JSON文本字符串轉換為DOM的對象,您可以在其中訪問所有變量及其值。

另一方面,如果通過Ajax調用接收到JSON字符串,則只需在$.ajax()函數中添加dataType:"json"選項,即可在處理函數中自動創建一個對象。

$.ajax({
    url:'someUrl',
    dataType: 'json',
    success: handleData
});

function handleData(jsonObj) {
    var key1=jsonObj.key1;
    //key 1 now is "value1"
}

http://api.jquery.com/jQuery.ajax/

實際上,您也可以使用函數$.getJSON()作為執行相同操作的簡單方法

http://api.jquery.com/jQuery.getJSON/

工作代碼在這里:

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
    $.ajax({
        url:'url_of_json_file',
        dataType: 'json',
        success: createDropDown
    });
    $.each(data[0], function(key, val) {
        items.push('<option id="' + key + '">' + val + '</option>');
    });
    $("#dropDown").append(items.join('')); 
});
</script>
</head>
<body>
All JSON values in drop down.
    <select id="dropDown">
    </select>
</body>
</html>

假設文件中的JSON內容具有以下形式:

[{ 
"Key1": "value1",
"key2":"value2"
}]

好了,這就是解決方案,

success : function(msg) {
      $.each(msg, function(index, elem) {
         $.each(elem, function(key, value){
            $('<option value="'+value+'">'+value+'</option>').appendTo($("#sampleResp"));
         });
    });
 }

小提琴: http : //jsfiddle.net/Bzf7j/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM