2016-01-26 70 views
1

我用Django框架來實現一個web項目。我從MongoDB數據庫中提取一組數據對象,並將它們設置爲組合框。我有兩個組合框,並且更改第一個中的值會更改第二個中的值。如何將字符串轉換爲JavaScript中的JSON?

這是我查看HTML文件的代碼。

<div class="form-group"> 
      <div class="form-controls"> 
       <label>By Product Code </label> 
       <select name="productCode" id="onecb"> 
        <option></option> 
       {% for entry in product_code %} 
         <option value="{{ entry.code }}">{{ entry.product_name }}</option> 
        {% endfor %} 

      </select> 
      </div> 
     </div> 

     <!--<div class="form-group"> 
      <label>By Product Code </label> 
      <input type="number" class="form-control" placeholder="Enter Product Code" name="productCode" maxlength="5" max="1000"> 
     </div> --> 

     <div class="form-group"> 
      <div class="form-controls"> 
       <label>By Batch Code </label> 
       <select name="batchCode" id="twocb"> 
       <option></option> 
       {% for entry in batch %} 
         <option value="{{ entry }}">{{ entry.batch_code }}</option> 
        {% endfor %} 
      </select> 
      </div> 
     </div> 

這是我的JavaScript代碼。

<script> 
    var first = document.getElementById('onecb'), second = document.getElementById('twocb'); 



    var ddlArray= new Array(); 
    for(i = 0; i < second.options.length; i++) { 
     ddlArray[i] = second.options[i].value; 

     //var obj = JSON.parse(ddlArray[i]); 
     console.log(ddlArray[i]); 
    } 


    first.onchange = function (e) { 
     var val = e.target.value; 
     empty(second); 

     for (i = 0; i < ddlArray.length; i++) { 
      //if(ddlArray[i] == val){ 
       addOption(ddlArray[i], second); 
      ///} 


     } 
    }; 

    function empty(select) { 
     select.innerHTML = ''; 
    } 

    function addOption(val, select) { 
     var option = document.createElement('option'); 
     option.value = val; 
     option.innerHTML = val; 
     select.appendChild(option); 
    } 


</script> 

控制檯輸出:

{'batch_code': 'B001', 'created_date': datetime.datetime(2016, 1, 16, 12, 57, 11, 394000), '_id': ObjectId('569a3e27f125be38311fe15a'), 'key_quntity': 12, 'product_code': 0} 
{'batch_code': 'B002', 'created_date': datetime.datetime(2016, 1, 16, 12, 58, 21, 183000), '_id': ObjectId('569a3e6df125be38311fe167'), 'key_quntity': 21, 'product_code': 2} 

但是當我取消這條線

//var obj = JSON.parse(ddlArray[i]); 

它給這個錯誤

SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data 

-------- --------我想做什麼---------------------------------

我希望當我從第一個組合框中選擇一個產品代碼時,只有相對的批代碼被加載到第二個組合框。

例如:我在第一個組合框中選擇產品代碼二(2),然後將'B002'加載到第二個組合框。

-------------------編輯後------------------------- ---------------

根據答覆,我得到的只有產品編號和批次代碼:

{'product_code': 0, 'batch_code': 'B001'} 
{'product_code': 2, 'batch_code': 'B002'} 
{'product_code': 1, 'batch_code': 'B089'} 

,但我仍然得到同樣的錯誤。

+0

這不是有效的JSON。 – Pointy

+0

@Pointy,我從mongoDB數據庫獲取數據,我想迭代這個obect,並分別拿'產品代碼'和'批代碼'。 – uma

+0

通過調用它們各自的toString()方法使ObjectId和datetime成爲一個字符串。 – WitVault

回答

3

我想你可以使用正則表達式的解析

var str = "{'batch_code': 'ikk', 'created_date': datetime.datetime(2016, 1, 16, 12, 57, 11, 394000), '_id': ObjectId('569a3e27f125be38311fe15a'),  'key_quntity': 12, 'product_code': 0}"; 
var reg1 = /(?:\'product_code\'\:)\s+(\w+)/; 
var reg2 = /(?:\'batch_code\'\:\s+\')(\w+)/; 
var product_code = reg1.exec(str)[1];//ikk 
var batch_code = reg2.exec(str)[1]; //0 
+0

@Stanisalv謝謝,我只想拿B001和0。我不想採取batch_code和product_code字。 plz,期待一些答案。 – uma

+0

@stanisalv謝謝你..............! – uma

+0

,對不起,當執行這個刺,{'batch_code':'ikk','product_code':3},通過這個錯誤,TypeError:reg2.exec(...)是空的,你能幫助我嗎? ? – uma

2

簡短回答:對於Javascript,單引號和雙引號都適用於引用字符串。例如:「名稱」和「名稱」都是有效的; 但是,對於JSON,只有雙引號纔有效。例如。 「名稱」是有效的。 'name'無效。所以:

JSON.parse({'product_code': 0, 'batch_code': 'B001'}) 

它會失敗:因爲{ 'PRODUCT_CODE':0, 'batch_code': 'B001'}是不是字符串;

JSON.parse("{'product_code': 0, 'batch_code': 'B001'}") 

它也將失敗,因爲屬性名稱是單引號(不是JSON標準)

JSON.parse("{\"product_code\": 0, \"batch_code\": \"B001\"}") 

它將工作

JSON.parse('{"product_code": 0, "batch_code": "B001"}') 

它也將工作,或者。

相關問題