2012-03-10 21 views
0

我正在通過HTTP調用我的數據庫。由於它與我的應用程序不在同一臺服務器上,因此我正在使用JSONP。所以每次我想從我的數據庫查詢信息時,我的JavaScript函數會向DOM樹添加另一個腳本標記。當我的應用程序運行一段時間後,源代碼充斥着SCRIPT標籤。每次我使用JSONP撥打電話時,是否必須創建一個新的SCRIPT標籤?

這只是我不得不接受與JSONP一起工作還是有其他解決方法?

+0

幾乎可以肯定有更好的方式去做這件事。你可以發佈一些代碼嗎? – 2012-03-10 22:34:31

回答

1

是的,這只是JSONP的一個問題。您可以將onload處理程序附加到script元素以在完成時對其進行清理(對於IE,爲onreadystatechange)。

或者,既然你控制了兩臺服務器,你可以使用CORS。這比JSONP少得多,並提供了XMLHttpRequest的靈活性。

1

這取決於瀏覽器,但一般來說,是的。你必須添加一個新的腳本標籤。但是,您可以在腳本加載後刪除腳本dom元素。如果您使用的是jQuery,它會爲您處理這個問題 - 您需要使用這種方法來執行此操作,這與瀏覽器有關。

如果您使用的是Visual Studio,即使腳本被移除,您仍然會在調試器中看到對該腳本的引用。據我所知,在生產模式下,這並不意味着有「泄漏」。

+0

是的。 jQuery爲你處理這個並且非常容易使用。 – 2012-03-11 17:51:51

0

當我收到JSONP響應時,我刪除script標記。例如:

function makeJSONPRequest() { 
    var script = document.createElement('script'); 
    var callbackName = 'callback' + (+new Date()) + '_' + Math.floor(Math.random() * 10000); 
    script.type = 'text/javascript'; 
    script.src = 'http://www.example.com/jsonp?callback=' + callbackName; 
    window[callbackName] = callback; 
    document.head.appendChild(script); 
    function callback(data) { 
     delete window[callbackName]; 
     document.head.removeChild(script), script = null; 
     console.log(data); 
    } 
} 
相關問題