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范围是成功事件处理程序。它在该功能之外不可用。

tourl其次,由于您发出 AJAX 请求,undefined直到该请求返回响应。唯一确定tourl已分配其值的方法是等到回调执行任何依赖于它的操作。

如评论中所述,如果多次执行 AJAX 请求,这会将多个事件处理程序绑定到您的按钮。为了解决这个问题,您可以在绑定新事件处理程序之前取消绑定事件处理程序。

于 2012-05-30T10:24:59.747 回答
1

您正在封闭范围内定义一个新变量。改变

var tourl = data;

tourl = data;

然后将其分配给全局变量。

于 2012-05-30T10:24:09.617 回答