2

JSON 文字列を返す .post フォームを作成しました。選択ボックスの名前に基づいてデータを取得する必要があります。次の例を参照してください。

JavaScript

$(document).ready(function(){
    $.post('/seller/product_upload/helpers/jpost_product_form_autofill.php',{product_id:$("input[name='product_id']").val()},function(data){
        alert(data);
        if(data!='false'){
            var obj = jQuery.parseJSON(data);
            $("#attributes_table select").each(function(){
                var select=$(this);
                select.find("option").each(function(){
                    var option=$(this);
                    var select_name=select.attr('name');
                    alert(select_name);
                    alert(obj.select_name);
                    if(option.val()==obj.select_name){
                        option.attr('selected','selected');
                    }
                });
            });
        }
    });
});     

ここで重要なセクションは、実際には下部ifです。obj.select_nameここではメインのオブジェクト名ではありません。これは実際にはselectbox、JSON で解析された配列キーの値と一致するようにした の名前です。

しかし今、システムは未定義のアラートを出し続けていobj.select_nameます。JSONオブジェクトとして解析する前に、最初にselect_nameを文字列として解析する方法はありますか?

4

2 に答える 2

3

私はあなたがそれをしたいと信じています:

var name = 'select_name';
alert(obj[name]);
于 2013-02-12T14:25:38.720 に答える
0

前述のように、不明な文字列をインデックスとして使用するには、角かっこを使用する必要があります。そうは言っても、jQuery のval関数を使用してコードを簡素化できます。オプション値を手動で設定する必要はありません。オプション値valを読み取ることができるのと同じように設定できます。このように:

var obj = jQuery.parseJSON(data);
$("#attributes_table select").each(function(){
    var select = $(this);
    select.val(obj[select.attr('name')]);
});

valは自動的にforEach内部で行うため、これを行うこともできます。

var obj = jQuery.parseJSON(data);
$("#attributes_table select").val(function(){
    return obj[$(this).attr('name')];
});
于 2013-02-12T14:33:25.933 に答える