2010-07-28 83 views
2

有教程那裏解釋如何做到這一點,如herehere的一大堆。jQuery的自動完成功能無法與JSON數據工作

看起來真正的輕鬆吧?然而,我仍然設法浪費了半天的時間而沒有做任何事情。

例如:下面的作品精絕

public ActionResult FindStuff(string q) 
{ 
    return Content("test"); 
} 

$('#MyTextBox').autocomplete("MyController/FindStuff", { 
    parse: function(data) { 
     alert('parsing'); 
    } 
}); 

如果我將其更改爲以下,絕對沒有任何反應。

public JsonResult FindStuff(string q) 
{ 
    return Json(new { name = "test" }); 
} 

$('#MyTextBox').autocomplete("MyController/FindStuff", { 
    dataType: 'json', // I've also tried with this line commented out 
    parse: function(data) { 
     alert('parsing'); 
    } 
}); 

所以它看起來像parse呼叫不會被擊中,也就是我假設的數據負載莫名其妙地吹起來或者認爲沒有數據。有任何想法嗎?謝謝。

p.s.它的喬恩Zaefferer插件here

回答

3

確保您正在返回一個數組,你允許GET請求(如果您正在使用ASP.NET MVC 2.0):

public ActionResult FindStuff(string q) 
{ 
    return Json(new[] { new { name = "test" } }, JsonRequestBehavior.AllowGet); 
} 

然後按照例子:

$('#MyTextBox').autocomplete("MyController/FindStuff", { 
    dataType: 'json', 
    parse: function (data) { 
     var rows = new Array(); 
     for (var i = 0; i < data.length; i++) { 
      rows[i] = { data: data[i], value: data[i].name }; 
     } 
     return rows; 
    }, 
    formatItem: function (row, i, n) { 
     return row.name; 
    } 
}); 

很好地工作。

備註:FireBug幫助非常迅速診斷問題,因爲它表明你正在發送正是AJAX請求,他們爲什麼成功或失敗。

+0

該死JsonRequestBehavior!這不是第一次讓我受益。 – fearofawhackplanet 2010-07-28 12:12:33

+0

這就是爲什麼螢火蟲是非常有用的。你立即得到錯誤。 – 2010-07-28 12:36:19

相關問題