jquery代码块只能成功一次

问题描述:

我写了下面的jquery代码块。当我的网站上的邮政编码发生变化时,此代码就会运行,但仅在邮政编码第一次更改时才能正常运行。我在代码中放置了三个警报。当代码块已经运行一次,我没有达到第三次警报。难道我做错了什么?jquery代码块只能成功一次

$('#postcodefield').change(function(){ 
    var newPC = $(this).val() 
    var areaData = null; 
    var MAPITURL = "http://mapit.mysociety.org/postcode/"; 
    var postcodeUrl = MAPITURL + newPC; 

    $('#gpQueryTerm').val(newPC); 

    $.ajax({ 
     type : 'GET', 
     async: false, 
     url : postcodeUrl, 
     dataType : 'json', 
     error: function(){ 
      $('input[name=town]').val(6); 
     }, 
     success: function(data){ 
      alert('1'); 
      areaData = data; 
      alert('2'); 
      // Extract the ward number 
      ward = areaData.shortcuts.ward; 
      wardCode = areaData.areas[ward].codes.ons; 
      // now we have the ons, get the townsend value from the db 
      alert('3'); 
      $.post("/tasks/getTownsend.cfm", { 
       code: wardCode 
      }, function(data){ 
       $('input[name=town]').val(data); 
      }); 
     } 
    }); 
}); 

在此先感谢

詹姆斯

+0

是否有任何错误? – Jivings 2012-03-01 16:27:22

+0

不,我正在查看控制台并且没有错误? – 2012-03-01 16:31:27

+0

您是否尝试过使用像Firebug或Fiddler这样的调试工具来查看发送的请求和回复? – 2012-03-01 16:34:19

如果第三警报从未被调用,则必须存在一个错误:

ward = areaData.shortcuts.ward; 
wardCode = areaData.areas[ward].codes.ons; 

鉴于这就是问题的数据我可以给出最详细的答案。我建议你看一下JSON响应,并确保它是你期望的结果。

+0

感谢您的帮助。我想我已经知道了。对于secound邮编,我使用的是'areaData.shortcuts.ward'并没有被重新定义为字符串,而是作为一个对象。有没有办法测试一个变量是否是一个字符串? – 2012-03-01 17:50:14

+0

@JamesPrivett是的,你可以做'if(obj typeof'string')' – Jivings 2012-03-01 17:58:40