2010-05-23 181 views
1

我想HTML標記對象的JSON對象轉換的JavaScript才能把它們發送到從JavaScript的服務器。因爲我必須將這些對象保存在Ruby on Rails服務器上。這些HTML對象是canvas標籤對象和使用CAKE API創建的圖形對象。我已經使用了stringify功能,但它不起作用。 這是我的代碼:轉換HTML Tag對象,以JSON對象

window.onload=function() 
{ 
    var CAKECanvas = new Canvas(document.body, 1000,1000); 
    var canvas=CAKECanvas.canvas; 
    var text=document.createElement('textarea'); 
    text.id="text"; 
    text.rows="100"; 
    text.cols="200"; 
    document.body.appendChild(text); 
    canvas.style.borderStyle="solid"; 
    canvas.style.borderColor="black"; 
var rect= new Circle(); 
    rect.radius=100; 
    rect.centered=true; 
    rect.cx=Math.random() * 500; 
    rect.cy= Math.random() * 300; 
    rect.stroke= false; 
    rect.fill= "red"; 
    rect.xDir = Math.random() > 0.5?1:-1; 
rect.yDir = Math.random() > 0.5?1:-1; 
    var obj=new Object; 
    var count = 0,k; 
    for (k in rect) 
     { 
      if (rect.hasOwnProperty(k)) 
       { 
        count++; 
        obj[k]=rect[k]; 
       } 
     } 
    alert(count); 
rect.addFrameListener(function(t, dt) 
    { 
       this.cx += this.xDir * 50 * dt/1000; 
     this.cy += this.yDir * 50 * dt/1000; 
     if (this.cx > 550) 
     { 
      this.xDir = -1; 
     } 
     if (this.cx < 50) 
     { 
      this.xDir = 1; 
     } 
     if (this.cy > 350) 
     { 
      this.yDir = -1; 
     } 
     if (this.cy < 50) 
     { 
      this.yDir = 1; 
     } 
    } 
); 

CAKECanvas.append(rect); 
    var carAsJSON = JSON.stringify(obj); /////////////////NOT CONVERTING THE OBJECT OBJ  INTO JSON OBJECT 
} 
+0

你有一個示例頁面?你在HTML中包含了[json2.js](http://www.json.org/js.html)嗎?什麼是錯誤? – 2010-05-23 11:37:10

+0

@Marcel:沒有示例頁面。 stringify功能不起作用。它將其轉換爲json對象。不,我沒有包含json2,js – cooldude 2010-05-23 11:48:06

+0

但錯誤是什麼?如果'JSON.stringify'沒有在某處定義(例如,在json2.js或本地瀏覽器的實現中),它將不起作用。 – 2010-05-23 11:50:42

回答

1

只有原始值(字符串,日期,布爾值,數字)和對象和陣列結構是可能的,以序列化到JSON。這意味着像RegExp或Canvas等其他主機對象不能被序列化。

總之,JSON被限制爲數據( '信息')。

所以,你將不得不保存使用.innerHTML創建的標記,或保存,以便它可以重新創建數據。

+0

@ Sean:我可以直接發送JavaScript對象到服務器。如果是那麼如何。 – cooldude 2010-05-23 13:41:17

+1

不,您必須使用客戶端和服務器端編程環境共有的格式來傳遞它。截至目前,這是JSON。 有關JSON是什麼的描述,請參閱json.org。 – 2010-05-23 14:31:15

+0

@cooldude:但是,正如肖恩所說的,除了數據之外,你不能'串化'任何其他東西(所以不是函數或HTML元素)。 – 2010-05-23 14:48:16