jQuery AJAX脚本更改IP地址 - 崩溃多个浏览器

时间:2010-08-09 15:29:14

标签: ajax jquery

我有一个表单配置为更改网络设备上的IP地址,并且一切正常。我遇到的问题是如何处理客户端IP地址更改等问题。我把一些jQuery发送到必要的坐位,然后等待看看新的IP是否可以访问,如果它是浏览器转发,如果不是浏览器显示新的IP信息并让用户知道他们可能需要更改他们的网络配置回到框中。

问题在于,此脚本偶尔会出现.ajax调用的错误情况,然后浏览器无法再加载该框上的任何页面。如果您使用任何其他浏览器,Web服务器仍然可以访问,因此它本身不是问题。如果您关闭浏览器并重新加载页面,则可以正常运行。这让我相信某个地方有一个循环,但我似乎无法找到它。以下是我在客户端使用的内容。

$(function(){
    var newIp;
    var newSnm;
    var newGw; 
    var ns1;
    var ns2; 

    $("#updateip").click(function(){
        newIp = $("#ipaddress").val();
        newSnm = $("#subnetmask").val();
        newGw  = $("#gateway").val();
        ns1 = $("#ns1").val();
        ns2 = $("#ns2").val();

        $status.dialog('open');
        $.ajax({
            type: "POST",
            url: "setuphandler.php",
            data: { updateip : "false", ipaddress : newIp , subnetmask : newSnm, gateway : newGw, ns1 : ns1, ns2 : ns2},
            timeout: 10000, //If the post doesnt finish in under 10 seconds this will force an error event
            success: //This will fire if the IP was not changed by the post
                function(xhr, data){
                    $status.dialog('close');
                },
            error: //This will fire if the IP address has been changed by the post
                function(){
                    checkNewURL();
                }
            });
    });

    //Function to forward the browser if the new IP is reachable, if not alert the user and display the new settings to them 
    function checkNewURL(){
        $.ajax({
            type: "GET",
            timeout: 700,
            cache: false,
            url: 'http://' + newIp,
            error: //if the new ip is not reachable, display new connection info to the user 
                function(){
                    $status.dialog( "option", "title", "Error" );
                    $status.dialog( "option", "height", 300 );
                    $status.html(" \
                                <small> \
                                    <br />\
                                    <b>Unable to contact new IP address.</b> \
                                    <br />\
                                    You may need to change settings on your local machine in order to communicate with this address. \
                                    <br />\
                                    IP Address - " + newIp + "\
                                    Subnet Mask - " + newSnm + "\
                                    Gateway - " + newGw + "\
                                </small> \
                                ");
                },
            success: //If the new ip is reachable, auto-forward the user
                function(){
                    $status.html("Redirecting...");
                    redirectUrl = 'http://' + newIp + '/setup.php'
                    setTimeout("window.location=redirectUrl", 2000);
                }
        });
    }

    $status.dialog({
        modal: true,
        height: 225,
        width: 350,
        title: 'Applying Changes',
        autoOpen: false,
        draggable: false,
        resizable: false,
        closeOnEscape: false,
        open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
    });

});

2 个答案:

答案 0 :(得分:4)

这不是答案,但你应该改变

                setTimeout("window.location=redirectUrl", 2000);

                setTimeout(function() { window.location=redirectUrl}, 2000);

将文字字符串发送到该函数非常糟糕,因为它较慢并且不如函数文字那么好。

答案 1 :(得分:0)

这结果是一个非常不相关的问题/答案。在测试中,我正在为名称服务器输入随机ip。这不会是一个问题,除了盒子上有一个初始化脚本,它正在将主机名更改为但不将它添加到/etc/hosts,因此机器无法自己进行正确的查找{ {1}}地址。事实证明,这打破了sudo!无论如何,感谢大家的关注!