我有一个使用ajax从.php文件获取响应的Javascript代码。我正在使用" eval()"测试和一切工作正常(有点慢)但我发现了一个很好的技巧,我可以使用setTimeut。我仍然是一个初学者但是每个人都说eval是危险的,我应该避免这就是为什么我在寻找替代方案。 setTimeut比eval(速度)工作得更好但是安全吗?
使用setTimeout(result,0)来执行我从php文件中接收的代码(作为字符串)是否安全?或者它比eval()更安全?请提前帮助,谢谢。
我的代码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');
});";
}
答案 0 :(得分:0)
这有用吗?我从来没有尝试使用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'));
});
答案 1 :(得分:0)
任何其他名字的玫瑰......
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);
});
}