[英]Parse string from AJAX Success to run as JQuery
在我的HTML頁面上,我有一個AJAX帖子來獲取一些數據。 返回的數據包含一個字符串,該字符串的內容為原始javascript。
$.ajax({
url: '@Url.Action("GetPropertyDataForInstance", "Local_Data")',
type: 'POST',
dataType: 'json',
data: instancePropertyRequest,
contentType: 'application/json; charset=utf-8',
success: function (response) {
var javscriptRawString = response.javascriptToExecute;
var alertString = response.data;
}
})
javscriptRawString的內容:
alert(alertString);
得到此javascriptRawString之后,該怎么做才能直接在其中執行javascript?
這比eval稍好一點,因為eval是邪惡的;)
(new Function(response.data))()
使用eval
是邪惡的,因為可能有很多安全漏洞。 您正在全局范圍內執行代碼。 Function
通過在其自己的范圍內執行來采取不同的處理方式。
new Function
也更快
在你的情況下
$.ajax({
url: '@Url.Action("GetPropertyDataForInstance", "Local_Data")',
type: 'POST',
dataType: 'json',
data: instancePropertyRequest,
contentType: 'application/json; charset=utf-8',
success: function (response) {
(new Function(response.data))()
}
})
new Function
從原始文本創建一個新函數。
()()
立即執行功能
如果您使用ajax獲得功能,我還將添加一些額外的檢查和標頭。 檢查一下。
https://stackoverflow.com/a/17468822/2450730
編輯
如果你想通過ajax傳遞參數
//raw ajax response
var x='param';
alert(x)
如果您想從ajax內部傳遞參數(不好)。
success: function (response) {
var x='param';
(new Function(response.data))(x)
}
生的
alert(x);
編輯2
如果您使用1.腳本2.參數
那么您需要定義一個參數名稱。在本例中為“ x”。
js
(new Function('x',response.script))(response.param)
RAW response.script
alert(x)
更多參數:
(new Function('a','b','c','alert(a+b+c)'))(1,2,3) // 123
測試它 ... http://jsfiddle.net/pLQzd/ 閱讀它 ... https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function滾動到底部。
但是當您從同一ajax調用中獲得包含函數和vars的對象時
我只會創建已經描述過的東西。
生的
var param='hello';
alert(param);
甚至更簡單
alert('hello');
您可以通過eval
運行任何字符串:
eval('alert("hello world")');
確保您確實知道自己在逃避什么。
為什么不使用整數格式化ajax響應?
例如
$.ajax({
//Your AJAX
}).done(function(response) {
//Let's say response from the script is 1.
switch(response) {
case 1:
alert('Hello world');
break;
//case ... etc.
}
});
永遠不要使用eval();
除非您別無選擇。
評估===邪惡!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.