我只是想创建一个动态网址。我正在调用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>");
}
});
}
答案 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没有报告任何错误。