跨域请求 数据返回却无法执行回调函数的原因之一

前端之家收集整理的这篇文章主要介绍了跨域请求 数据返回却无法执行回调函数的原因之一前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

由于公司项目的问题,导致跨域的情况比较多。既要考虑安全性问题又要解决跨域。只能从中做一些取舍。

今天发现的问题是,前端已经获取后台返回的CALLBACK函数,但是无论如何都不执行。这可把我急的,之前也写过一次跨域请求。现在调用同样写好的函数,却是一个能执行一个不能执行。多次比对发现返回的内容也没有错。最后发现原因是我把回调函数写在了

$(function(){
//我把跨域请求也写在了这个匿名函数
function callback(res)//回调函数也写在匿名函数中 {

}

});

我将回调函数拿出来放在$(function(){})之外就能够执行了。那么为什么会出现这样的情况呢?
请先运行下面代码

$(function(){

    function test() {   
        console.log('在外面不可以调用已经准备好的函数');

    }

})
test();

上面的代码提示出错。test()函数找不到,因为test()函数是匿名函数的内部成员方法,同样JSONP跨域请求也是如此,请求后返回的回调函数相当于上面的test();当你的test是定义在匿名函数内部。则无法访问。而且浏览器还不会提示你这个回调函数找不到。

出现这种低级错误的原因主要还是归咎于自己学得不精通,一般都会把所有函数写在匿名函数内部。学得越多越杂,思考的东西就越少,写了这么久我都没有意识到JS和其他后台语言不通。能够在方法里面定义方法。呵呵。。。要走的路还长着呢,现在我已经开始明确方向并往前端走了。JS方面的专业书籍还没有看过。有空得学精通。JS是一门很高端的语言。对的,高端。在我看来。

这个内部函数让我想起了闭包的内容。恩。下一篇就记录下闭包这个东西吧。

猜你在找的Json相关文章