2013-10-14 38 views
0

設置HTML我有一個jQuery函數異步獲得來自sucess AJAX後產生,並使用globalEval

function post_data_async_globalEval(post_url, post_data, globaleval) { 
$.ajax({ 
    type: 'POST', 
    url: post_url, 
    data: post_data, 
    dataType: 'html', 
    async: true, 
    timeout: 20000, // in milliseconds ~ 20 secs 
    success: function (result) { 
     jQuery.globalEval(globaleval); 
    } 
}); 
} 

數據發佈和我這樣稱呼它是

post_data_async_globalEval("../Internal/RTV_COM?vid=1578", "type=TM", "$('#postinnerhtml').html(result);"); 

所有我想要的是執行此JS功能

$('#postinnerhtml').html(result); 

並用來自成功的結果變量替換響應的html函數來自Ajax post請求。

,但我得到這個錯誤,當我執行的代碼

Uncaught ReferenceError: result is not defined 

我可以添加JS代碼我的成功函數內部,但我不希望只使用一個特定的JS代碼,我只是想解析我想在操作成功後執行的JS代碼。

+0

你必須使用'globalEval'嗎?如果將成功函數中的'result'設置爲具有相同名稱的全局變量,您可能會成功,但爲什麼不讓函數接受回調函數而不是字符串呢?這個問題(我相信)是你的評估函數在全局上下文中執行,而不是成功函數上下文,所以它不能訪問被評估函數的局部變量。 –

+1

如何使用eval而不是jQuery.globalEval? – Christophe

+0

哦,我用eval,它工作:) :) – BOSS

回答

3

不是傳遞一個字符串作爲globaleval說法,你可以傳遞一個函數:

function(result) {$('#postinnerhtml').html(result);} 

而且在Ajax調用情況下,你可能也想改變參數名稱...)

[編輯]爲了在此傳達我的初始評論,你也可以使用本地eval ()而不是jQuery.globalEval()。然而,當你接受來自外部源的輸入(這裏是ajax調用的結果)時,eval()通常被認爲是邪惡的。

1

如果您只想用#postinnerhtml內容替換回復,您應該安全地將$('#postinnerhtml').html(result);移動到success: function (result) { }之內。 所以會是這樣的:在這個

success: globaleval 

(順便說一句:http://jsbin.com/OGOgEnO/1/edit

+0

是的,我知道,但問題是,我不發送這個代碼被執行,我可以發送任何JS代碼來執行 – BOSS