错误在jQuery的自动完成功能为“一个为空”

问题描述:

该功能被称为在文本框的onkeydown事件错误在jQuery的自动完成功能为“一个为空”

function autoComplete(type, select) { 
    $('#search_name').autocomplete({ 
    source: function(request, response) { 
     $.ajax({ 
     url: "/searches/autoComplete", 
     dataType: "json", 
     data: { 
      term: $.trim(request.term) 
     }, 
     success: function(data) { 
      response($.map(data, function(item) { 
      return { 
       label: item.value, 
       value: item.value, 
       type : item.type, 
       id : item.id 
      } 
      })); 
     } 
     }); 
    }, 
    minLength: 2, 
    select: function(event, ui) { 
     var url = ui.item.type + '/edit/' + ui.item.id; 
     $(location).attr('href', url); 
    } 
    }); 

} 

当控制台检查得到一个错误如下

a is null 

..."resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b... 

此错误将只配备当没有回应data返回,否则它工作正常。

如何避免此错误?

+0

等待。所以你打'成功',但'数据'为空? – Sphvn 2012-07-26 10:56:54

如果您希望返回数据请求,但它返回null,那么不应该将其视为成功,而应视为失败。在你的服务器代码中,如果你不能返回请求的数据,你应该返回404或类似的东西。

编辑:从下面的评论,似乎这是最好的解决方案,在PHP中使用header("HTTP/1.0 404 Not Found");

我想你也可以只检查在JavaScript来避免错误,但是这是不是一个真正的干净的解决方案..

success: function(data) { 
    if(data) { 
     response($.map(data, function(item) { 
      return { 
       label: item.value, 
       value: item.value, 
       type : item.type, 
       id : item.id 
      } 
     })); 
    } 
} 
+0

我认为,如果数据为空(如此处)。然后ajax将不会进入成功回调... – 2012-07-26 11:03:43

+0

在这种情况下,我猜数据实际上不是null,而是一些没有必要的属性的试图运行映射的空白对象。实际上,即使返回的数据为空,成功回调也会被调用。你的服务器端代码看起来如何?只要你返回200 OK状态,成功回调就会被执行。 – 2012-07-26 11:05:01

+0

我使用php,在服务器端代码刚刚返回'echo null;'没有结果。 – 2012-07-26 11:15:15