getJSON不使用最新的jquery,但适用于较旧的jQuery

时间:2015-07-10 20:51:29

标签: javascript php jquery ajax

我正在更新一个使用2009年jquery版本的旧网站。我删除了旧的jquery并添加了以下行以使用最新版本的jquery:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

下面的代码从下拉列表中获取用户选择的值,然后jquery根据用户填充另一个下拉列表&#39;选择。

以下代码适用于2009年的旧版jquery ,但是当我切换到最新的jquery时,它不起作用。没有错误。控制台很清楚。我添加了警报,但只有警报1和警报2工作...警报3从未显示。

$(function(){
  $("select#area_name").change(function(){
    alert('1');
    $.ajaxSetup({ cache: false });
    alert('2');
    $.getJSON("/props/res/get-area.php",{area_name: $(this).val()}, function(j){
      var options = '';
      alert('3');
      for (var i = 0; i < j.length; i++) {
        options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
      }
      $("select#arearesults").html(options);
    });
  });
});

我猜测jquery处理getJSON部分的方式已经改变了,但我不是一个程序员而只是帮助一个朋友,所以任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:1)

根据jQuery docs

  

jQuery 1.5中引入的jqXHR.success(),jqXHR.error()和jqXHR.complete()回调方法自jQuery 1.8起不再使用。要准备最终删除的代码,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。

所以将代码更改为:

$(function(){
  $("select#area_name").change(function(){
    alert('1');
    $.ajaxSetup({ cache: false });
    alert('2');
    $.getJSON("/props/res/get-area.php",{area_name: $(this).val()}).done(function(j){
      var options = '';
      alert('3');
      for (var i = 0; i < j.length; i++) {
        options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
      }
      $("select#arearesults").html(options);
    });
  });
});

修改

正如Barmar所说,将成功回调作为$ .getJSON的参数传递并未被弃用。

同样来自文档:

  

重要提示:从jQuery 1.4开始,如果JSON文件包含语法错误,请求通常会无声地失败。出于这个原因,避免频繁手动编辑JSON数据。 JSON是一种数据交换格式,其语法规则比JavaScript的对象文字符号更严格。例如,JSON中表示的所有字符串,无论它们是属性还是值,都必须用双引号括起来。有关JSON格式的详细信息,请参阅http://json.org/

您确定JSON格式正确吗?请发布JSON样本。

答案 1 :(得分:0)

我用你的代码(使用虚拟JSON)创建了一个JSFiddle:https://jsfiddle.net/rqkeya45/

HTML:

<select id="area_name">
  <option value="1">Volvo</option>
  <option value="2">Saab</option>
  <option value="3">Mercedes</option>
  <option value="4">Audi</option>
</select> 
<select id="arearesults">
</select>

JS:

  $("select#area_name").change(function(){
    alert('1');
    $.ajaxSetup({ cache: false });
    alert('2');
      jQuery.getJSON("http://jsonplaceholder.typicode.com/posts", {userId: $(this).val()}, function(j){
        var options = '';
        alert('3');
        for (var i = 0; i < j.length; i++) {
          options += '<option value="' + j[i].title + '">' + j[i].title + '</option>';
        }
        $("select#arearesults").html(options);
    });
  })

您的代码有效,因此收到的JSON似乎存在问题(可能在语法上不正确)。