2013-08-29 7 views
1

пытаюсь обновить базу данных.jQuery: обновить базу данных со всеми данными из ajax-запроса

Для этого IAM делать как этот

С Js кода

var data = { 
    "jobid": $('#jobid').val(), 
    "names": $('#names').val(), 
    "scripttype": $('#testscripts').val() 
}; 
var msg=""; 
for(i = 1; i <=4; i++) { 
    data["Param" + i + "Key"] = $('#key' + i).val(); 
    data["Param" + i + "Value"] = $('#value' + i).val(); 
} 
     $.ajax({ 
      type: 'post', 
      url: "/save", 
      dataType: "json", 
      data: data     
     }); 

в Node.js стороне

jobsCollection.update({ 
      _id: id 
     }, { 
      $set: { 
       names: record.names,   
       script: record.scripttype, 
       // i dont know what should i place in this part??? 
       // i have to set paramkey and paramValues  
      } 
     }, 
        { 
      upsert: true 
      }, 
     function (err, result) { 
      if (!err) return context.sendJson([], 404); 
     }); 

в record.names и record.scripttype получать соответствующие значения.

I don't know how to set values got from the for loop for updating 

request going 

Request: /save 
{ jobid: '', 
    names: 'first', 
    scripttype: 'fow', 
    Param1Key: '1', 
    Param1Value: 'oneeeeee', 
    Param2Key: '2', 
    Param2Value: 'twoooooooo' 
    etc........ 
    ............ 
} 

ответ

3

Поскольку имена свойств динамические, вам необходимо использовать атрибут свойств стиля индексатора JavaScript, как показано ниже.

Просто измените процесс в основном. Я не уверен, где данные находятся в точке, которую вы вызываете update, поэтому я назвал ее sourceData в приведенном ниже примере;

// create an object with the well known-property names 
var set = { 
    names : record.names, 
    script : record.scripttype 
}; 

// now loop through the params and set each one individually 
for(i = 1; i <=4; i++) { 
    var key = "Param" + i + "Key"; // build a key string 
    set[key] = sourceData[key];  // grab the data and set it 
    key = "Param" + i + "Value"; // and repeat 
    set[key] = sourceData[key]; 
} 

затем передать его на обновление:

jobsCollection.update({ 
      _id: id 
     }, { 
      $set: set   // pass the object created above 
     }, /* etc. */ 

Если вы не знаете, счетчик Params, вы можете:

  1. отправить его
  2. использовать вместо for .. in для обхода всех свойств

За № 2:

for(var key in sourceData) {   
    // you could filter the property names here if you'd like 
    // (like if only Params# were important) 
    set[key] = sourceData[key]; 
} 
Смежные вопросы