比如下面这个代码,我自己也设置了一个函数f, 为什么callback能显示出局部变量a,而我自己设置的f函数不能,报错:“ReferenceError: a is not defined”,也就是说callback传递过程中怎么做到的保持原来的作用域?$("#btn").click(function(e){
var a=999;
var f=function(){
alert(a)
}
$.getJSON("http://127.0.0.1/js.php?f="+f+"&callback=?",function(data){
alert(a)
})
})
js.php代码:$callback=$_REQUEST['callback'];
echo "(".$callback.")".'();';
$f=$_REQUEST['f'];
echo "(".$f.")".'();';
var a=999;
var f=function(){
alert(a)
}
$.getJSON("http://127.0.0.1/js.php?f="+f+"&callback=?",function(data){
alert(a)
})
})
js.php代码:$callback=$_REQUEST['callback'];
echo "(".$callback.")".'();';
$f=$_REQUEST['f'];
echo "(".$f.")".'();';
解决方案 »
- 将json数据中的某一条json[i],作为方法的参数传递,可行么?
- setTimeout setInterval 在一个页面中如果有多个地方 速度会慢
- Arg: Fraction out of range (0 to 1 allowed)js报错是啥意思?
- 关于js splitter效果的问题
- 请问怎样验证带汉字的文本框输入的字符长度
- 如何通过鼠标来调整表格的单元格的大小?
- Javascript与IE版本的两个问题
- 浏览器的差异性。document.all['xxx'] 在 FireFox 下不能用,咋办?
- 创建一个复选框和一个选择框,当选中复选框时,显示选择框,不选中时,隐藏选择框,怎么实现?
- 奇怪我的自动转页为什么不成功?
- div显示与隐藏
- Extjs 仿淘宝五星评级功能
alert(a);
}&callback=?f转换为函数体了,改成下面的就行
$("#btn").click(function(e){
var a=999;
window.f=function(){
alert(a)
}
$.getJSON("http://127.0.0.1/js.php?f=f&callback=?",function(data){
alert(a)
})
})
版主 我知道f已经脱离click,但我想知道为什么callback没有脱离?jsonp是如何做到的
我想自己写一个纯js的,代替jsonp 实现跨域
版主 我知道f已经脱离click,但我想知道为什么callback没有脱离?jsonp是如何做到的jquery自己注册的回调也是全局的,脱离了click作用域,你传递的回调函数是再click作用域内引用了a变量,形成了闭包,多以获取到a变量。。和我1#的将f修改为全局的一样,引用到了click事件中的a变量,形成了闭包。。