2015-10-16 58 views
0

我有一個Javascript代碼,它使用ajax從.php文件獲取響應。我使用「eval()」進行測試,一切正常(有點慢),但我發現了一個很好的技巧,我可以使用setTimeut。我仍然是初學者,但每個人都說eval是危險的,我應該避免這個,這就是爲什麼我正在尋找替代品。 setTimeut的工作比eval(速度)好得多,但安全嗎?從php文件中執行JS中的字符串,setTimeout vs 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

運作的?我從來沒有嘗試過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')); 
}); 
+0

是,左右逢源的eval(結果)和setTimeout的(結果,0)起作用。 Eval是緩慢的,就像每個人都說「邪惡」,但我不知道setTimeout怎麼樣。 是啊謝謝你的幫助,但我想隱藏一些javascript代碼.php文件(我只是玩js和php文件),我不想在.js代碼中保留少數功能,這就是爲什麼我使用ajax):) – rockn21s

0

玫瑰的任何其他名稱...

大部分與eval的問題與採取串並執行一般問題他們作爲代碼。避免將字符串傳遞給setTimeoutsetInterval,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); 
    }); 
} 
+0

hide()是一個例子,我想在.php中保留一些函數,這些函數將通過ajax調用,並由響應執行(通過setTimeout)。我只想在PHP代碼中隱藏一些JS代碼,並在需要時運行它們。 (只是爲了測試是否可能) – rockn21s

+0

你不能*隱藏PHP中的JS。您仍然必須將其發送給客戶端才能執行,然後不再隱藏。你所做的只是讓事情變得更加低效和複雜(因此難以維護和調試)。 – Quentin

+0

是的,我知道,執行代碼時不會再隱藏。但我仍然想這樣做。 '隱藏'的功能在PHP中不會很複雜,只有幾行,但不會1,除非他們通過按鈕執行它們,否則會看到它們,對吧?這個問題; setTimeout比eval()在這種情況下更好?我的意思是有沒有「安全」危險? – rockn21s