Jquery Firebug在调试时跳过$(document).ready(function()之后的行

Jquery Firebug在调试时跳过$(document).ready(function()之后的行,jquery,debugging,firebug,lines,Jquery,Debugging,Firebug,Lines,我只想创建一个动态URL。我正在调用listServices方法,它正在按预期工作,而我正在从listService调用的getPortNumber不工作。我在getPortNumber方法中添加了dubug点。我正在获取domainValue的值,但在$(文档)之后无法调试。就绪(函数()。该控件直接返回端口号,在最终URL中,我得到的端口号值为未定义。我检查并验证了端口号URL(json文件)。我的json文件如下所示 { "servers": [ { "listen

我只想创建一个动态URL。我正在调用listServices方法,它正在按预期工作,而我正在从listService调用的getPortNumber不工作。我在getPortNumber方法中添加了dubug点。我正在获取domainValue的值,但在$(文档)之后无法调试。就绪(函数()。该控件直接返回端口号,在最终URL中,我得到的端口号值为未定义。我检查并验证了端口号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>");
            }
    });
}
函数getPortNumber() { var端口号; var domainValue=$(“#域”).val(); $(文档).ready(函数(){ $.getJSON(端口url,函数(结果){ $.each(结果,函数(){ $。每个(此,函数(k,v){ if(v.category==域值){ 端口号=v.listeningPort; 返回false; } }); }); }); }); 返回端口号; } 函数listServices() { $(文档).ready(函数(){ $(“#列表”).text(“”); var jList=$(“#列表”); var listOfServers=$(“#服务器”).text(); var serverArray=listOfServers.split(“,”); 对于(var i=0;i”); } }); }
您不需要在函数中调用
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;
}

并对另一个执行相同操作。

如果存在错误,则它将跳过


为什么使用
$(document).ready(function())

听起来您需要学习在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()
。因此,要进入其中,您需要在其中设置一个断点,并让代码运行,直到到达该断点。

删除$(document).ready(getPortNumber中的函数())后,调试跳过代码
$.getJSON(端口url,函数(结果){.Firebug未报告任何错误。

document.ready如果在函数内将永远不会执行。Fiddle:从getPortNumber中删除$(文档).ready(函数())后,$.getJSON(端口url,函数(结果)后的调试跳过代码{.Firebug没有报告任何错误。您需要在回调中放置断点(如果
语句位于
中),而不是在
$getJSON()
上。