【发布时间】:2011-02-10 03:32:52
【问题描述】:
我创建了一个在本地运行的 Windows 服务,并提供了一个可以通过 ajax 调用与之通信的 Web 服务。我正在尝试编写一些代码来检测 Web 服务是否在 localhost 上运行,以便在应用程序未运行时提示用户安装该应用程序。当服务未运行时,.ajax 调用不会触发错误回调,即使在超时之后也是如此。这是我现在正在运行的代码
$.ajax({ url: 'http://localhost:12345/GetVersion/',
dataType: 'json',
timeout: 1000,
complete: function() {
alert('complete');
},
success: function() {
alert('success');
},
error: function() {
alert('error');
}
});
当服务运行时,完成和成功都会被调用。当服务停止时,我永远不会收到完整或错误警报。
任何想法为什么回调永远不会被触发?有没有其他方法可以通过简单地调用其中一种方法来查看服务是否正在运行?
更新: Fiddler 没有报告 localhost 或 127.0.0.1 请求的任何内容,因此我为我们的域创建了一个指向 127.0.0.1 的子域。当服务运行时,子域按预期工作,当服务未运行时,提琴手给我这个错误:
[Fiddler] Connection to localhost.stayhealthy.com failed.Exception
Text: No connection could be made because the target machine actively refused it 127.0.0.1:49994
我仍然在拨打电话的网站上得到相同的结果。永远不会触发错误回调。
更新 2: 这是一个完整的工作示例,您应该可以使用它进行测试。
<html>
<head>
<title>Ajax Localhost Test</title>
<script language="javascript" type="text/javascript" src="jquery-1.4.2.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function(){
$('#messages').append("Starting<br />");
$.ajax({ url: 'http://localhost:12345/GetSomething/?callback=?',
dataType: 'json',
timeout: 1000,
complete: function() {
$('#messages').append("Complete<br />");
},
success: function(version) {
$('#messages').append("Success<br />");
},
error: function(request, status, error) {
$('#messages').append("Error<br />");
}
});
});
</script>
</head>
<body>
<h1>Ajax Localhost Test</h1>
<div id="messages"></div>
</body>
</html>
除非您在 localhost:12345 上运行服务,否则调用应该失败,但永远不会触发错误或完成。
【问题讨论】:
-
运行 Fiddler 看看会发生什么。
-
当我点击 localhost 或 127.0.0.1 时,即使服务正在响应,Fiddler 也不显示任何请求。
-
你用什么浏览器来测试这个,我在 FF 中测试了你的代码,它运行良好。在 IE 中它似乎不起作用。 IE 说:访问被拒绝。
-
文件显示为 file:/// - 样式 URI?
-
我已经在最新版本的 IE、FF 和 Chrome 中进行了测试。没有运气从他们中的任何一个那里得到错误响应。我添加了一个完整的工作示例并将其添加到原始问题中。
标签: jquery