1

動的 URL を作成したいだけです。listServices メソッドを呼び出していますが、listService から呼び出している getPortNumber が機能していないため、期待どおりに機能しています。getPortNumber メソッドにデバッグポイントを追加しました。domainValue の値を取得していますが、$(document).ready(function() の後でデバッグできません。コントロールは直接 portNumber を返すようになり、最終的な URL でポート番号の値が未定義として取得されます。チェックして、 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

4 に答える 4

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;
}

もう一方にも同じことを行います..

于 2013-03-20T06:06:17.180 に答える
1

JavaScript デバッガーでコールバック関数にステップ インする技術を学ぶ必要があるようです。あなたが望む単純な方法ではうまくいきません。コールバック関数が実行の論理的な次の行のように見えても、コールバック関数にステップインしません。技術的にはそうではありません。コード行をステップ オーバーするように指示すると、呼び出したコールバック関数を含め、コード行が行うすべてのことをステップ オーバーします。

ステップオーバー$(document).ready(function()したときにドキュメントがまだ準備できていない場合、コールバック関数は実行されず、デバッガーはその関数に入りません。そのため、そのコールバック関数が実際に実行されたときに何が起こるかを確認したい場合は、そのコールバック関数に手動でブレークポイントを設定する必要があります。行ごとにステップインすることはできません。

同じことがあなたの$.getJSON(port_url, function(result) {電話とあなたの$.each()電話にも当てはまります。関数をステップオーバーすると言うと$.each()、文字通りその関数をステップオーバーし、その関数の次の行に進みます。これにより、コールバック全体がスキップされます。にステップ$.each()インする場合は、コールバックに手動でブレークポイントを設定するか$.each()、jQuery の実装にシングル ステップ インして、最終的にコールバックが呼び出されるのを監視する必要があります。

したがって、このコードでは:

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() を 1 ステップ実行すると、コールバック関数を使用する 4 つの場所$(document).ready()( 、$.getJSON()$.each()および) のそれぞれで問題が発生します$.each()。したがって、それらの中に入るには、それらの中にブレークポイントを設定し、そのブレークポイントに到達するまでコードを実行させます。

于 2013-03-20T06:26:37.417 に答える
0

After removing $(document).ready(function() from getPortNumber the debug skip code after $.getJSON(port_url, function(result) {. Firebug is not reporting any errors.

于 2013-03-20T16:45:30.433 に答える
0

そこに何らかのエラーが存在する場合はスキップします。

使用した理由$(document).ready(function()

于 2013-03-20T06:06:20.643 に答える