2010-01-15 49 views
0

如果您使用JavaScript編寫了一個調用遠程服務的API的類,並且該遠程API提供了回調,那麼如何將響應返回到發出請求的對象的實例中?你如何獲得響應回到對象的實例?

我會嘗試給你一個非常基本的示例FOO,用於對提供回調的BAR服務進行跨域調用。請忽略通常的安全問題,(我擁有兩臺服務器)。

function FOO() { 
    this.response = null; 

    this.execute = function(url) { 
     var script = document.createElement('script'); 
     script.src = url; 
     document.getElementsByTagName('head')[0].appendChild(script); 
    } 

    this.catch = function(response) { 
     this.response = response; 
    } 
} 


var sample = new FOO(); 

sample.execute('http://barservices.com/sample/?callback={ plshelphere: this.catch}'); 

我有辦法,使這項工作,但我很好奇,如果有一個「接受的方法」在這裏。

任何人都有我的想法?

回答

0

我不知道如果我沒有理解100%,所以讓我仔細檢查:

  • 你要編寫自定義JavaScript對象/類。
  • 它應該作爲一個外觀來封裝與遠程Web服務通信的邏輯。
  • 此服務位於不同的域。

但我不會跟着你爲什麼創建一個元素。你爲什麼不使用'Xml Http Request?'?

儘管如此,我建議一些閱讀有關Ajax代理 「模式」:
http://www.springerlink.com/content/mn623501w3h0n166/
http://ajaxpatterns.org/Cross-Domain_Proxy

...和GoF的外觀模式
http://en.wikipedia.org/wiki/Facade_pattern

+0

XmlHttpRequest不能跨域使用。 – AnthonyWJones 2010-01-15 21:39:19

+0

因此Ajax代理「模式」:) – 2010-01-15 21:41:26

0

只要樣本在全局命名空間中聲明,您可以使用:

sample.execute('http://barservices.com/sample/?callback=sample.catch'); 

如果不是,那麼還有其他幾個選項。 你可以建立一套全球回調,並添加一個新的給它翼http://gist.github.com/110884 你可以使用具有功能這樣的事情(jQuery的等)

一個框架,如果你的服務不關心你函數看起來像,你可以將它傳遞給一個裸函數(twitter將這些東西去掉)。

(function(){alert('I work')}) 
相關問題