我正在尝试使用JQuery从URL中获取php的变量,并在javascript中使用该变量来更改页面上的内容。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$.get('http://jsonp.jit.su/?url=http://5.175.191.73/alert.php', function(data){
var alertstate=data.isit;
alert('pretty awesome, eh? ' + alertstate);
});
</script>
<script type="text/javascript">
if (alertstate==1) {
document.getElementById('theImg').src="http://upload.wikimedia.org/wikipedia/commons/e/e7/Alert.gif";
play_single_sound(audiotag1);
}
</script>
代码一直在JQuery中使用警报,但是一旦我到达Javascript if语句,错误控制台就会告诉我没有定义alertstate。任何帮助将不胜感激。
答案 0 :(得分:5)
你有两个问题:
$.get
是异步的,因此您调用 $.get
的地方启动 ajax调用,但随后您的代码继续执行ajax调用是异步发生的。因此,$.get
之后的代码将在$.get
完成之前运行。
您的alertstate
变量是您作为回调$.get
给出的函数中的变量;它不存在于你的第二个代码块中的代码中,它希望它是一个全局变量。
相反,将第二个脚本中的逻辑放入第一个$.get
回调中:
<script>
$.get('http://jsonp.jit.su/?url=http://5.175.191.73/alert.php', function(data){
var alertstate=data.isit;
alert('pretty awesome, eh? ' + alertstate);
if (alertstate==1) {
document.getElementById('theImg').src="http://upload.wikimedia.org/wikipedia/commons/e/e7/Alert.gif";
play_single_sound(audiotag1);
}
});
</script>
如果你真的,真的希望它们是分开的,你可以将所有内容包装在一个作用域函数中(以避免创建全局变量),使用一个变量,回调结束,并使用$.get
返回的promise,像这样:
<script>
(function() {
var alertstate, promise;
promise = $.get('http://jsonp.jit.su/?url=http://5.175.191.73/alert.php', function(data){
alertstate=data.isit;
alert('pretty awesome, eh? ' + alertstate);
});
promise.then(function() {
if (alertstate==1) {
document.getElementById('theImg').src="http://upload.wikimedia.org/wikipedia/commons/e/e7/Alert.gif";
play_single_sound(audiotag1);
}
});
})();
</script>
答案 1 :(得分:3)
$。get()是异步的,因此上面的代码不会按顺序执行。尝试下面的代码,你需要在$ .get()方法的成功回调中调用一个方法。
<script>
var alertstate;
$.get('http://jsonp.jit.su/?url=http://5.175.191.73/alert.php', function(data){
alertstate=data.isit;
alert('pretty awesome, eh? ' + alertstate);
playSound();
});
</script>
<script type="text/javascript">
function playSound(){
if (alertstate==1){
document.getElementById('theImg').src="http://upload.wikimedia.org/wikipedia/commons/e/e7/Alert.gif";
play_single_sound(audiotag1);
}
}
</script>
答案 2 :(得分:2)
问题在于范围。 alertstate will only exist inside of your
$。get`但不在其之外
$.get('http://jsonp.jit.su/?url=http://5.175.191.73/alert.php', function(data){
var alertstate=data.isit;
//You can use alertstate in here
alert('pretty awesome, eh? ' + alertstate);
});
//But not here
答案 3 :(得分:2)
<script>
$.get('http://jsonp.jit.su/?url=http://5.175.191.73/alert.php', function(data){
var alertstate=data.isit;
alert('pretty awesome, eh? ' + alertstate);
doWork(alertstate);
});
function doWork(state) {
if (state==1) {
document.getElementById('theImg').src="http://upload.wikimedia.org/wikipedia/commons/e/e7/Alert.gif";
//hoping audiotag1 is pre-defined
play_single_sound(audiotag1);
}
}
</script>