如何将JSONP与面向对象的Javascript一起使用

时间:2014-02-10 07:03:35

标签: javascript jsonp

我是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。 请帮忙。

提前致谢。

1 个答案:

答案 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的代码,因此我们无法分辨为什么会出现这种情况。