2013-10-31 47 views
-1

我有一個腳本,我無法控制並且位於另一個域中。默認過程是將其包含在腳本標記中,並且運行良好。使用jQuery從if語句調用腳本參數

我不想在默認情況下運行它,所以我有一個if語句,如果爲true,我想運行該腳本。 所以默認選項是:

<script src="http://domain/site/script?Id=12345&delayMs=2000&stayMs=10000&chance=0.1" type="text/javascript" ></script> 

我教我可以只使用jQuery.getScript()得到它的運行上面的網址,但這不起作用。我不知道包含的實際腳本和函數的正確鏈接,所以我不能getScript和調用函數。

任何想法都會有幫助。

問候 布賴恩

+3

做什麼用'getScript加入()'的問題? – Johan

+0

嗨,約翰,我嘗試了下面的建議,並使用getScript(),但它似乎沒有做任何事情。讓我解釋一下,如果我在頁面加載時將鏈接放在頁面上的腳本標記中,它會在頁面上創建一個浮動div,並將ID傳遞給它。當我使用ajax/getScript調用腳本時,div不會出現。 –

+0

嘗試我的更新。另外,你使用什麼服務器端語言? – Johan

回答

0

既然你有跨域問題,試試這個($.getScript()只是一個簡寫本,無論如何,與crossDomain: true除外)。

$.ajax({ 
    url: 'http://domain/site/script?Id=12345&delayMs=2000& 
            stayMs=10000&chance=0.1', 
    crossDomain: true, 
    dataType: 'script', 
    success: function() { 
     // script is loaded 
    }, 
    error: function() { 
     // handle errors 
    } 
}); 

另一種解決方案,您可以嘗試使用純JS:

function loadScript(src, callback) 
{ 
    var s, 
     r, 
     t; 
    r = false; 
    s = document.createElement('script'); 
    s.type = 'text/javascript'; 
    s.src = src; 
    s.onload = s.onreadystatechange = function() { 
    //console.log(this.readyState); 
    //uncomment this line to see which ready states are called. 
    if (!r && (!this.readyState || this.readyState == 'complete')) 
    { 
     r = true; 
     callback(); 
    } 
    }; 
    t = document.getElementsByTagName('script')[0]; 
    t.parent.insertBefore(s, t); 
} 

用法:

var url = 'http://domain/site/script?Id=12345&delayMs=2000& 
            stayMs=10000&chance=0.1'; 
loadScript(url, function(){ 
    console.log('script loaded'); 
}); 
+1

這是錯誤的方式。 'getScript' *將*工作跨域,但ajax調用不會。 – Archer

+0

@Archer'getScript'只是一個普通的'.ajax'請求,所以請詳細說明。 – Johan

+0

我剛剛在控制檯上用腳本在我的一臺服務器上試了一下,'$ .getScript'工程但是'$ .ajax'抱怨了跨域調用。使用'.getScript',我能夠加載腳本並且運行良好,因爲我可以訪問該腳本中的全局變量和方法。 – Archer