2013-03-21 64 views
0

這裏是我的第一個問題!JSON值中的jQuery對象

我打電話給JSON通過AJAX在客戶端驗證庫中使用。庫要求我指定當前規則的位置,我希望插入錯誤消息。

{ 'errorlocation' : jQuery('[name="foo"]').closest('.bar') } 

我的驗證庫可以讓我第一個初始化後,注入更多的規則,所以,當我通過REST提交我的模型,我可以收到錯誤的服務器響應:對於我的靜態驗證規則,比如我可以寫一個對象。我目前正在開發該服務器響應。我寧願錯誤響應只是一組驗證規則,以便稍後將這些規則注入到已在我的頁面上創建的同一個驗證對象中。所以在響應JSON中,我需要像上面代碼片段中那樣的定義。

似乎儘管jQuery在全局名稱空間中絕對可用,但Backbone和jQuery的解析json算法無法評估對象的值jQuery()。所以這不起作用:

jQuery.parseJSON("{ 'errorlocation' : jQuery('[name=\"foo\"]').closest('.bar') }"); 

我曾經想過,只是存儲「[NAME =‘富’]」和jQuerying解析後,但是,這並不對,我想鏈的情況下工作,如上面.closest('.bar')

有誰知道JSON解析器將解析/允許位於全局名稱空間的變量?

回答

0

你有沒有考慮將整個jQuery調用存儲爲字符串,然後在客戶端運行eval?像這樣:

json = jQuery.parseJSON("{ 'errorlocation' : 'jQuery(\'[name=\"foo\"]\').closest('.bar')' }"); 
location = eval(json.errorlocation) //runs the jQuery string 
+0

感謝邁克,將工作雖然我希望能夠將響應直接粘貼到驗證庫中,而不是每次加載其他驗證規則時都必須對其執行一對多的操作。 – ivory 2013-03-21 04:27:17

1

JSON是一種數據格式,而不是代碼格式。一般而言,您希望以將數據從服務器傳遞到客戶端的方式構建系統,然後客戶端使用數據來確定操作。所以,也許你會通過foo.bar作爲數據,另一個參數來確定要運行的功能。

如果你真的要這樣設計它,我建議不要,你可以使用eval去給一個任意的字符串,如JavaScript,像這樣:

var errorInfo = jQuery.parseJSON(
    "{ 'errorlocation' : \"jQuery('[name=\"foo\"]').closest('.bar')\" }"); 

eval(errorInfo.errorocation);