一段时间后,功能无法在Ajax中使用

时间:2019-03-15 14:20:50

标签: javascript jquery ajax

我有输入,应在更改时将其发送给ajax并返回响应。 Ajax可以正常工作,并且可以成功,但是如果我不进行更改或单击,则其中的click函数将无法正常工作。如果我在响应后立即单击它就可以了,但是如果我在4-5秒钟内不做任何更改,则类似于关闭会话。我如何避免这个时机?

这是我的ajax示例

$('#unvan_search').on('keyup change', function() {

  var unvan = $(this).val();

  $.ajax({

    type: "POST",
    url: url,
    data: {
      'tpIdRegion': region_type_id_j + '_' + region_id_j,
      'road': unvan,
      'guid': my_key
    },
    beforeSend: function() {
      console.log('before send');
    },
    success: function(e) {
      console.log('suceess');
      var output = [];


      for (var i = 0; i < e.names.length; i++) {
        output.push('<li class="get_street es-visible" idx="' + e.names[i].X + '" idy="' + e.names[i].Y + '" id="' + e.names[i].ID + '" value="' + e.names[i].ID + '" style="display: block;">' + e.names[i].Name + '</li>');
        console.log('filled');
      };
      $('#unvan_select_div ul').html(output.join(''));

      $("#unvan_select_div ul").on("click", '.get_street', function() {
        //MY CODE HERE WHICH I CAN NOT USE AFTER 4-5 SECONDS
      });

    },
    error: function(x, t, m) {
      alert("error");
    }
  });


});

2 个答案:

答案 0 :(得分:0)

此绑定在这里:

$("#unvan_select_div ul").on("click", '.get_street', function() { ... }

无需在success回调中声明它。为此,存在这种委托绑定:能够处理稍后创建的元素上的事件

答案 1 :(得分:0)

如果您这样构造它,可能会起作用。

var ret = false;
  $.ajax({
    type: "POST",
    url: url,
    data: {
      'tpIdRegion': region_type_id_j + '_' + region_id_j,
      'road': unvan,
      'guid': my_key
    },
    beforeSend: function() {
      console.log('before send');
    },
    success: function(e) {
      ret = true;
      console.log('suceess');
      var output = [];

      for (var i = 0; i < e.names.length; i++) {
        output.push('<li class="get_street es-visible" idx="' + e.names[i].X + '" idy="' + e.names[i].Y + '" id="' + e.names[i].ID + '" value="' + e.names[i].ID + '" style="display: block;">' + e.names[i].Name + '</li>');
        console.log('filled');
      };

      return;
    },
    error: function(x, t, m) {
      alert("error");
    }
  });
});
if(ret) {
      $('#unvan_select_div ul').html(output.join(''));

      $("#unvan_select_div ul").on("click", '.get_street', function() {
        //MY CODE HERE WHICH I CAN NOT USE AFTER 4-5 SECONDS
      });
}