我正在尝试对我的 Web 服务器进行 AJAX 调用以获取有关城市的信息。
- 我在页面上有一个选择下拉菜单,其中填充了 3 个值:[空白]、“纽约州”和“密歇根州安阿伯”
- 当一个项目被选中时,城市名称被重新格式化:空格变成“-”
- 然后
.ajax()
被解雇到“/data/[ city ]” - 当服务器响应时,它会
alert()
使用它检索到的 JSON 对象进行调用。
代码:
$( document ).ready(function() {
$('#city').change(function () {
var city = $.trim($(this).val()).replace(/ /g,"-");
if(city.length > 0)
{
var url = "/data/cities/" + city;
$.ajax({
url: url,
context: document.body,
dataType: 'json'
}).done(function(data) {
alert(data);
});
}
});
});
出于某种原因,.ajax()
呼叫有时会拒绝触发。当url
等于时,永远不会发出传出 HTTP 请求:
/data/cities/New-York,-NY
url
但是,它在等于时成功触发:
/data/cities/New-York-NY
(没有逗号)/data/cities/New-York,NY
(没有破折号)/data/cities/New-York,-NYC
(附加字符)/data/cities/Ann-Arbor,-MI
(类似格式)
我已经验证:
- 浏览器“失败”时不会发出传出 HTTP 请求(通过 Chromium 的网络选项卡检查)
- Web 服务器接收所有 URL 的 HTTP 请求,但有问题的 URL 除外
- 页面上没有 Javascript 错误
我错过了一些明显的东西吗?这似乎真的很奇怪,.ajax()
不会为这个特定的 URL 触发......
编辑:
.ajax()
向请求添加了错误回调。它以 state = "rejected" 和 statusText = "error" 的错误失败。
根据要求,<select>
页面上的标签:
<select id="city">
<option value=""></option>
<option value="New York, NY">New York, NY</option>
<option value="Ann Arbor, MI">Ann Arbor, MI</option>
</select>