2013-02-12 2 views
2

Я создал форму .post, которая возвращает строку JSON, и мне нужно получить данные на основе имени полей выбора. обратитесь к следующему примеру.JSON извлекает объект через имя переменной

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. Есть ли способ, в котором я могу сначала проанализировать select_name как строку перед тем, как он будет разбираться как объект JSON?

+0

Нет такой вещи, как «объект json». Есть строки json, которые могут быть декодированы в собственную структуру данных. если вы получите неопределенную ошибку, затем запишите структуру декодированных данных на консоль и посмотрите, что на самом деле там. –

ответ

2

Я считаю, что вы хотите сделать:

var name = 'select_name'; 
alert(obj[name]); 
+0

Привет. Спасибо всем за помощь. Вышеприведенный ответ работает !. Благодаря! – Lawrence

0

Как упоминалось выше, вы должны использовать квадратные скобки, чтобы использовать неизвестную строку в качестве индекса. Тем не менее, вы можете использовать функцию jQuery val для упрощения кода. Вам не нужно вручную устанавливать значения параметров, val может устанавливать их так, как будто они могут их читать. LKE это:

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

Вы также можете сделать это, так как val будет автоматически делать forEach внутри себя.

Смежные вопросы