2016-05-04 20 views
-1

我有2個JS腳本:分享同一個變量 - 一個具有.ready函數和其他不

<script type="text/javascript"> 

function capture(){ 
var canvas = document.getElementById('canvas'); 
var video = document.getElementById('video'); 
canvas.getContext('2d').drawImage(video, 0, 0, video.videoWidth, video.videoHeight); 
var img = canvas.toDataURL("image/png"); 
alert(img); 
} 
</script> 
<script type="text/javascript"> 
$(document).ready(function() { 

$(".post").click(function() { alert(img); 
var level = document.getElementById('level'); 
var language = document.getElementById('language'); 
var textac = document.getElementById('textac'); 
var decribac = document.getElementById('decribac'); 
$.ajax({ 
type: "POST", 
url: "love.php", 

data: {img: img, language: language, level: level, decribac:decribac, textac: textac }, 
    cache: false, 
    success: function(data){ 

    }}); 
    window.location.replace("love.php"); 

    }); 
    }); 
    </script> 

他們所做的就是在點擊「捕獲」第一個做的縮略圖視頻並將其放入畫布並保存var img。另一個點擊另一個按鈕'發佈'通過ajax發佈一切,包括圖像base64編碼的字符串。我的問題是,當我嘗試點擊「發佈」控制檯loggs出

- 404 Uncaught ReferenceError: img is not defined 

,我不知道爲什麼,如果我在第一個腳本提醒它,它被correctelly警報,但是第二個完全不認識它。如果我把捕獲finction在

$(document).ready(function(){..}); 

然後它doenst工作和控制檯說 - 捕獲函數是未定義的。這也很奇怪。如果我不把第二個按鈕處理程序,它不會做任何事情點擊。所以我需要把它們放在他們自己的腳本中 - 一個使用.ready功能,另一個不使用。現在我不能將第二個腳本的img var通過ajax發送給php腳本。幫幫我。

+0

什麼是'img'?它必須是'全局'或'作爲參數傳遞'才能被其他'方法/函數'訪問... – Rayon

+0

我需要在分解按鈕'.post'中使用它甚至處理程序來通過AJAX傳遞它 –

回答

1

你定義變量的一個函數裏:

function capture(){ 
    //... 
    var img = canvas.toDataURL("image/png"); 
    //... 
} 

所以只存在該函數的範圍之內。如果它需要是全球性的,全局定義它:

var img; 

function capture(){ 
    //... 
    img = canvas.toDataURL("image/png"); 
    //... 
} 

這將其連接到可以通過窗口的總範圍內進行訪問的其他代碼window對象。

+0

調用'capture '並且返回'datatURL'將會更好,因爲它不需要'global-variable' – Rayon

+0

@Rayon:我傾向於同意,但是在發佈代碼中沒有任何地方是capture()甚至被調用。所以我們並不瞭解整體結構。在這種情況下,避免全球範圍可能涉及一些重新設計。 – David

+0

真的!由於有很多'if-else'的東西我​​們不知道.. – Rayon

相關問題