我有一个表单配置为更改网络设备上的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(); }
});
});
答案 0 :(得分:4)
这不是答案,但你应该改变
setTimeout("window.location=redirectUrl", 2000);
到
setTimeout(function() { window.location=redirectUrl}, 2000);
将文字字符串发送到该函数非常糟糕,因为它较慢并且不如函数文字那么好。
答案 1 :(得分:0)
这结果是一个非常不相关的问题/答案。在测试中,我正在为名称服务器输入随机ip。这不会是一个问题,除了盒子上有一个初始化脚本,它正在将主机名更改为但不将它添加到/etc/hosts
,因此机器无法自己进行正确的查找{ {1}}地址。事实证明,这打破了sudo!无论如何,感谢大家的关注!