Firebug在$(文件).ready(函数()调试后跳过行

时间:2013-03-20 06:03:44

标签: jquery debugging firebug lines

我只是想创建一个动态网址。我正在调用listServices方法,它正在按预期工作,因为我从listService调用的getPortNumber不起作用。我在getPortNumber方法中添加了dubug点。我正在获得domainValue的价值,但我无法在$(document).ready(function()之后调试。控件直接返回portNumber,在最终的URL中我得到的端口号值为undefined。我检查了验证了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>");
            }
    });
}

4 个答案:

答案 0 :(得分: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;
}

并为另一个做同样的事情。

答案 1 :(得分: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()。因此,为了进入这些内部,你需要在它们内部设置一个断点,让代码运行直到它到达那个断点。

答案 2 :(得分:0)

如果存在某些错误,则会跳过。

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

答案 3 :(得分:0)

从getPortNumber中删除$(document).ready(function()之后的调试跳过代码 $ .getJSON(port_url,function(result){。Firebug没有报告任何错误。