2016-05-04 12 views
-1

Ich habe 2 js Skript:Teilen gleiche Variable unter mehreren js Skripte - man hat .ready Funktion und andere nicht

<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> 

Was tun sie erste auf, klicken Sie auf ‚Capture‘ ist, macht eine Miniaturansicht Video und legt es in Canvas und speichert die var img. Und andere beim Klicken auf einen anderen Button "post" posten alles über Ajax einschließlich der Bild-Base64-codierten Zeichenfolge. Mein Problem ist, dass wenn ich versuche, ‚post‘ Konsole

- 404 Uncaught ReferenceError: img is not defined 

loggs heraus zu klicken, und ich weiß nicht, warum, als ob ich es im ersten Skript alarmieren es correctelly alarmiert wird aber zweite tut es kennen. Und wenn ich die Einnahme finction unter

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

dann doenst es Arbeit und Konsole sagt - Capture-Funktion nicht definiert ist. Das ist auch komisch. Und wenn ich den zweiten Knopf-Handler nicht setze, tut er nichts beim Klicken. Also musste ich sie in ihre eigenen Skripte schreiben - eine mit .ready Funktion und eine ohne. Jetzt kann ich das img var nicht zum zweiten Skript bringen, um es über Ajax an das PHP-Skript zu senden. Hilfe.

+0

Was ist 'img'? Es muss "global" oder "als Argument übergeben" sein, um Zugriffe durch andere "Methoden/Funktionen" zu haben ... – Rayon

+0

Ich muss darauf zugreifen, indem ich die Schaltfläche '.post' gerade verarbeite, um sie über AJAX zu übergeben –

Antwort

1

Sie definieren diese Variable in einer Funktion:

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

es existiert also nur im Rahmen dieser Funktion. Wenn es sein muss global, definieren sie global:

var img; 

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

dass es dem window Objekt anhängen würde, wo es durch die von anderen Code innerhalb des gesamten Fensters Umfang zugegriffen werden kann.

+0

Capture aufrufen 'und returning' datatURL' ist besser, da es keine 'global-variable' benötigt. – Rayon

+0

@Rayon: Ich bin geneigt zuzustimmen, aber nirgendwo im geposteten Code wird' capture() 'sogar aufgerufen. Wir kennen also die Gesamtstruktur nicht wirklich. Die Vermeidung eines globalen Geltungsbereichs kann in diesem Fall eine Neugestaltung erforderlich machen. – David

+0

Wahr! Da gibt es viele 'if-else' Dinge, die uns nicht bekannt sind. – Rayon