jQuery .ajax()请求不解雇

时间:2013-08-03 20:47:12

标签: javascript jquery ajax

我正在尝试向我的网络服务器发出AJAX调用以获取有关城市的信息。

  • 我在页面上有一个选择下拉列表,填充了3个值:[空白],“纽约,纽约”和“Ann Arbor,MI”
  • 选择项目后,将重新格式化城市名称:空格将变为“ - ”
  • 然后.ajax()被解雇为“/ data / [ city ]”
  • 当服务器响应时,它会使用检索到的JSON对象调用alert()

代码:

$( 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请求
  • 页面上没有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>

1 个答案:

答案 0 :(得分:4)

默认情况下,除非您使用$ .ajaxSetup进行默认设置,否则您将使用GET方法。由于您没有为缓存指定显式值,并且根据jquery规范(api.jquery.com/jQuery.ajax),其默认值为true,因此您的浏览器可能仍在使用早期(缓存)响应(即使您在浏览器中看到的源代码是最新的。我建议使用POST(如果你是和服务器允许的话)和/或在$ .ajax({...})调用中指定cache:false explicity,只是为了排除任何有趣的东西。

(根据问题提问者的要求复制/粘贴我的评论)