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