2013-03-20 62 views
1

我只是想創建一個動態的URL。我打電話的listServices方法,它按預期工作,其中作爲我從調用getPortNumber listService是行不通的。我在getPortNumber方法添加dubug點,我收到值domainValue,但我不能$(文件)。就緒(函數()後,調試,控制直接進入返回端口號,並在最後的網址我得到的端口號值不確定。我檢查和驗證port_url(JSON文件)。我的JSON文件看起來像這樣

{ 
"servers": [ 
    { 
     "listeningPort": "6080", 
     "shutdownPort": "8180", 
     "redirectPort": "8443", 
     "sslPort": "8443", 
     "openWirePort": "61610", 
     "jmxPort": "9332", 
     "category": "Test A" 
    } 
} 

我被擊中。我希望這個問題是不是因爲你從JavaScript調用的方法另一種方法

function getPortNumber() 
{ 
    var portNumber; 
     var domainValue = $("#domain").val(); 

    $(document).ready(function() { 

     $.getJSON(port_url, function(result) { 
      $.each(result, function() { 
       $.each(this, function(k, v) { 
        if (v.category == domainValue) { 
         portNumber = v.listeningPort; 
         return false; 
        } 
       }); 
      }); 
     }); 
    }); 
    return portNumber; 
} 


function listServices() 
{ 
    $(document).ready(function() { 
      $("#list").text(""); 
      var jList = $("#list"); 
      var listOfServers = $("#servers").text(); 
      var serverArray = listOfServers.split(","); 
      for (var i = 0; i < serverArray.length; i++) 
      { 
       var port = getPortNumber(); 
       var tempURL = "http://"+serverArray[i].trim().toLowerCase()+".javaworkspace.com:"+port+"/services/listServices"; 
       jList.append("<li><a href="+tempURL+" target='_blank'>"+tempURL+"</a></li>"); 
      } 
    }); 
} 
+0

如果在函數中,document.ready將永遠不會執行。小提琴:http://jsfiddle.net/uxyKS/ – 2013-03-20 06:08:40

回答

2

你不需要調用document.ready函數內部.....因爲(我敢打賭)後的文件已經準備好調用該函數...

刪除

function getPortNumber() 
{ 
    var portNumber; 
    var domainValue = $("#domain").val(); 



    $.getJSON(port_url, function(result) { 
     $.each(result, function() { 
      $.each(this, function(k, v) { 
       if (v.category == domainValue) { 
        portNumber = v.listeningPort; 
        return false; 
       } 
      }); 
     }); 
    }); 

return portNumber; 
} 

,並做了另一個相同..

+0

從getPortNumber中刪除$(document).ready(function()之後的調試跳轉代碼 $ .getJSON(port_url,function(result){.Firebug不報告任何錯誤 – user2189478 2013-03-20 16:46:09

+0

你需要在回調('if'語句所在的位置)放置一個斷點,而不是在'。$ getJSON()'。 – Vlad 2013-03-20 16:49:01

0

如果一些錯誤存在,有那麼它會跳過。

爲什麼你使用$(document).ready(function()

+0

這可以很容易地進入註釋中。 – dakait 2013-03-20 06:07:37

1

這聽起來像你需要學習步入回調函數的JavaScript調試器的藝術。它不是你想要的簡單方式。即使認爲回調函數看起來像邏輯的下一行執行,它也不會進入回調函數。從技術上講不是。當你說要跨過一行代碼,它在步是代碼行不包括它調用的任何回調函數的一切。

當您跨過$(document).ready(function()且文檔尚未準備好時,它不會執行回調函數,並且調試器不會進入該函數。所以,如果你想看到當實際執行的回調函數發生了什麼,你必須手動將斷點在回調函數。你不能一步一步地進入。

您的$.getJSON(port_url, function(result) {呼叫和您的$.each()呼叫也是如此。當你說要邁過$.each()功能,它在幾步了該功能,並在該函數的下一行。這跳過了整個回調。如果你想進入$.each(),你必須在回調中手動設置斷點,或者你必須單步執行jQuery中的$.each()實現,並觀察它最終調用你的回調函數。

所以在這個代碼:

function getPortNumber() 
{ 
    var portNumber; 
     var domainValue = $("#domain").val(); 

    $(document).ready(function() { 

     $.getJSON(port_url, function(result) { 
      $.each(result, function() { 
       $.each(this, function(k, v) { 
        if (v.category == domainValue) { 
         portNumber = v.listeningPort; 
         return false; 
        } 
       }); 
      }); 
     }); 
    }); 
    return portNumber; 
} 

如果你想看到在內部$.each()循環發生了什麼,你將不得不設置在這條線if (v.category == domainValue) {一個斷點,讓代碼運行,直到遇到該斷點。在調試器中單步調試getPortNumber()將在您使用回調函數的四個位置中的每個位置遇到問題:$(document).ready(),$.getJSON(),$.each()$.each()。所以,爲了進入這些內部,你需要在它們內部設置一個斷點,並讓代碼運行直到碰到那個斷點。

0

從getPortNumber中刪除$(document).ready(function()後,調試跳過代碼 $ .getJSON(port_url,function(result){。Firebug不報告任何錯誤。

相關問題