我是JSONP的新手,并为我的应用程序实现了跨域功能,一切正常。现在我想更改我的javascript代码以应用面向对象。
我的api
http://localhost:8080/myApplication/getComments?callback=displayComments
CrossDomain.prototype.displayComments = function(data) {
// code to display the comments
}
现在我在下面的firebug中收到错误
ReferenceError: displayComments is not defined
我将api更改为
http://localhost:8080/myApplication/getComments?callback=this.displayComments
并发现该函数内嵌到回调中,如此
http://localhost:8080/myApplication/getComments?callback=callback=function (jsonData)
{
//code to display the comments
}
这次萤火虫的另一个错误
SyntaxError: function statement requires a name
我怀疑是否在面向对象的javascript中使用JSONP。 请帮忙。
提前致谢。
答案 0 :(得分:1)
除非你要创建该函数的实例,否则在函数原型上定义函数是没有意义的,所以从这开始。
var myCrossDomain = new CrossDomain();
然后你必须在对象上调用方法,而不是全局(它不是全局的,所以你不能这样做)
var uri = "http://localhost:8080/myApplication/getComments?callback=" +
encodeURIComponent("myCrossDomain.displayComments");
回应编辑和评论:
是的我正在另一个js文件中创建一个这样的实例
然后如上所示引用它。
我将api更改为
http://localhost:8080/myApplication/getComments?callback=this.displayComments
这是JSON-P。它通过添加新的脚本元素来运行。一切都在全球范围内被召唤。这将调用this.displayComments
,它与window.displayComments
相同。
如果要直接调用方法,则需要明确指定保存实例的全局变量。
如果您不想直接调用它,那么您可以使用更传统的方法生成一个新的匿名函数,该函数可以通过闭包访问所述对象,将该函数分配给全局变量(具有唯一名称)并使用该名称作为回调参数。
并发现该函数内嵌到回调中,如此
http://localhost:8080/myApplication/getComments?callback=callback=function (jsonData)
您没有向我们展示创建URI的代码,因此我们无法分辨为什么会出现这种情况。