2016-02-19 48 views
1

我目前正試圖實現以下操作,並按順序執行工作流程: 1.檢索包含重定向URI/URL(如果成功)的URL。 2.使用檢索到的URL打開新窗口,該窗口基本上重定向回到同一頁面,但現在URL的後面附加了'code = randomCode'。 3.解析出randomCode作爲別的東西的輸入。jQuery推遲的承諾似乎不適用於打開新窗口

問題: 在這一刻,我使用jQuery承諾首先$ .get(number 1),.then(do number 2),.then(do number 3)。

問題是,這整個功能只能在一次失敗後出現。即每次刷新時,第一次打開新窗口,但其他部分不會成功,即randomCode不會被成功解析出來,因爲在那個階段,jQuery無法檢測到打開的窗口,即使它應該因爲它正在使用。

但是,第一次失敗後,一旦打開窗口,每次後續嘗試都能成功地檢索到所有內容。

這是怎麼回事?有人可以幫忙嗎?我的代碼示例如下:

var retrievedURL; 
var desiredString; 
function getURL() { 

    $(document).ready(function() { 
     $.get(firstURL) // assume valid URL 
       .then(function(response) { 
        $('#url').html('Click this'); 
        $('#url-link').attr("href",response.url); 
        retrievedURL = response.url; 
       }) 
       .then(function() { 
        newWindow = window.open(retrievedURL ,'test'); 
       }) 
       .then(function() { 
        desiredString = newWindow.location.search.substr(6); 
       }) 


    }) 
} 

所以這就是函數的要點。我當然會繼續用desiredString做一些事情,但不知何故,每一次,第一次運行,desiredString都是null。

+1

刪除的getURL功能。這是防止你的代碼被綁定到document.ready – Oisin

+0

試了一下,然後它運行在一個無限循環... –

回答

0

如果新窗口確實重定向那麼你是不是佔的時間爲它做這樣的。您需要在新窗口中加載事件偵聽器,然後獲取URL

最後的then()不會等待新窗口加載它將幾乎立即被調用。您將需要從第二then()返回一個承諾,有最後的then()火這一承諾得到解決

後嘗試

$.get(firstURL) // assume valid URL 
      .then(function(response) { 
       $('#url').html('Click this'); 
       $('#url-link').attr("href",response.url); 
       retrievedURL = response.url; 
      }) 
      .then(function() { 
       newWindow = window.open(retrievedURL ,'test'); 
       // listen for window to load 
       newWindow.onload = function(){ 
        desiredString = newWindow.location.search.substr(6); 
        // do something with desiredString 
       } 
      }) 
+0

YESSSSS它工作我愛你。老兄,我認真地花了幾天時間,你就解決了它! –

0

刪除getURL函數。這是防止你的代碼從被綁定到的document.ready 試試這個:

var retrievedURL; 
var desiredString; 
$(document).ready(function() { 
    $.get(firstURL) // assume valid URL 
    .then(function(response) { 
     $('#url').html('Click this'); 
     $('#url-link').attr("href",response.url); 
     retrievedURL = response.url; }) 
    .then(function() { 
     newWindow = window.open(retrievedURL ,'test'); 
    }) 
    .then(function() { 
     desiredString = newWindow.location.search.substr(6); 
    }) 
}); 
+0

,導致無限循環... –

+0

以什麼方式?什麼部分在呼喚自己? – Oisin

+0

erm,打開的新窗口只是在原始窗口保持新的檢索代碼的情況下刷新...以及在那裏沒有任何反應。我不確定發生了什麼,但新打開的窗口不斷刷新並檢索新代碼。 –