這是可能做你想要什麼,但我不會推薦它。具體方法如下:
function doTheThing() {
var element, to_list;
/* code here that gets element and to_list */
// Modify the post to use a callback and the "text" data type
$.post($(F).attr('action'), $(F).serialize(), handleMove, "text");
// Here's the callback
function handleMove(data) {
eval(data);
}
}
這工作,因爲eval
是非常特殊的,它執行在它被稱爲(它以這種方式有點魔力)的範圍,所以在文本eval
求值的代碼可以訪問所有範圍內的變量eval
被調用。
稍微偏離主題,但我會推薦一種基於數據的方法。也許:
function doTheThing() {
var element, to_list;
/* code here that gets element and to_list */
// Modify the post to use a callback and the "json" data type
$.post($(F).attr('action'), $(F).serialize(), handleMove, "json");
// Here's the callback
function handleMove(data) {
if (data.errorMessage) {
/* ...show the error... */
}
else {
moveNode(element, to_list);
}
}
}
...您的服務器或者返回:
{"errorMessage": "Don't move it!"}
或
{"success": true}
或任何有意義的環境。哎呀,如果它真的只是「它的工作」或「這是一個錯誤」,你可以使用一個文本協議,其中「OK」表示沒問題,其他任何東西都是錯誤信息(因特網上充滿了基於文本的協議) 。我更喜歡更多的結構,但重點是你有選擇。
我會發現這種方法更容易維護。當你開始在層之間來回傳遞代碼時,代碼依賴於知道範圍內變量的名稱,這似乎是一個主要的緊密耦合問題。
'eval'幾乎總是一個壞主意。 – 2010-05-26 12:48:06
這應該已經發生了,但是使用'「script」'的數據類型:http://github.com/jquery/jquery/blob/master/src/ajax。js#L669 – 2010-05-26 12:50:07
這不適用於公共場所。那麼你最喜歡的方法是什麼? JSON?我的想法是,「劇本」已經在做這個。 – Dex 2010-05-26 12:50:09