1

私は現在、通常のフォーム送信を防ぎ、代わりに API から目的の出力を取得するこのコードを持っています。ただし、このデータを変数として設定して、ボタンのクリックでそこにリダイレクトできるようにしています (出力データは URL です)。次のコードがありますが、動作していないようです。何かご意見は?

var tourl;
$("form#surlform").submit(function(){
        var url = $("input#url").val(); 
        $.get("api/create.php?url=" + url, function(data) {
                $("input#url").val(data);
                $("input#url").select();
                $('#button').hide();
                $('#hbutton').show();
                var tourl = data;
            });

        return false;
    });
    });
$('#hbutton').bind('click', function() {
        window.location = tourl;
    });
4

2 に答える 2

2

bind呼び出しを成功イベント ハンドラー内に移動する必要があります。

$.get("api/create.php?url=" + url, function(data) {
    $("input#url").val(data);
    $("input#url").select();
    $('#button').hide();
    $('#hbutton').show();
    var tourl = data;
    $('#hbutton').bind('click', function() {
        window.location = tourl;
    });
});

まず、tourl成功イベント ハンドラーにスコープが設定されます。その機能以外では使用できません。

次に、AJAX リクエストを作成してから、そのリクエストが応答を返すまでにtourlなります。undefinedその値が確実に割り当てられていることを確認する唯一の方法tourlは、コールバックがそれに依存する何かを行うまで待つことです。

コメントに記載されているように、AJAX リクエストが複数回実行されると、複数のイベント ハンドラーがボタンにバインドされます。これを回避するには、新しいイベント ハンドラーをバインドする前に、イベント ハンドラーのバインドを解除します。

于 2012-05-30T10:24:59.747 に答える
1

閉じたスコープ内で新しい変数を定義しています。変化する

var tourl = data;

tourl = data;

その後、グローバル変数に割り当てられます。

于 2012-05-30T10:24:09.617 に答える