我有一个Javascript代码,使用ajax从.php文件获得响应。我使用"eval()"进行测试,一切都很好(有点慢),但我发现了一个很好的技巧,我可以使用setTimeut。我仍然是一个初学者,但是每个人都说eval很危险,我应该避免它,这就是为什么我在寻找一个替代品。setTimeut工作得比eval(速度)好得多,但它安全吗?
所以使用setTimeout(结果,0)来执行我从php文件(作为字符串)收到的代码是安全的吗?还是它比eval()更安全?请帮忙,提前感谢。
My code Javascript:
function sendAjax(vData) {
$.ajax({
method: 'GET',
url: '_process.php',
data: vData,
success : function (result) {
setTimeout(result, 0);
//old method eval(result);
}
});
}
$('.button1, .button2, .button3').click(function () {
sendAjax($(this).attr('class'));
});
和.php文件
if (isset($_GET['button1'])) {
echo " $('.button1').hide(500, function () {
console.log('some1clickedbutton1');
});";
}
这样行吗?我从来没有尝试过Eval()或setTimeout来运行ajax返回的函数。但是对我来说,在javascript中已经有了函数,并根据返回的值简单地调用它更有意义。
php文件:if (isset($_GET['button1'])) {
echo "true";
}else{
echo "false";
}
然后是javascript:
function sendAjax(vData) {
$.ajax({
method: 'GET',
url: '_process.php',
data: vData,
success : function (result) {
if(result == "true"){
hideButton1();
}
}
});
}
function hideButton1(){
$('.button1').hide(500, function () {
console.log('some1clickedbutton1');
});
}
$('.button1, .button2, .button3').click(function () {
sendAjax($(this).attr('class'));
});
玫瑰的另一个名字…
eval
的大多数问题都是将字符串作为代码执行的一般问题。避免将字符串传递给setTimeout
和setInterval
, new Function()
以及其他任何沿着这些行的内容。
一般情况下,您最好使用实际的JavaScript编写代码,然后从服务器发送纯数据(其中没有逻辑)。
对你的代码要做的事情做很多假设,你可以这样做:
if (isset($_GET['button1'])) {
$clicked = "button1";
}
$response = array( clicked => $clicked );
header("Content-Type: application/json");
echo encode_json($response);
和
success : function (result) {
$("." + result.clicked).hide(500, function () {
console.log("some1clicked" + result.clicked);
});
}