2010-07-28 5 views
2

Il existe de nombreux didacticiels expliquant comment procéder, par exemple here et here.jQuery La saisie semi-automatique ne fonctionne pas avec les données JSON

Ça a l'air vraiment facile hein? Pourtant, j'ai quand même réussi à perdre une demi-journée sans rien faire fonctionner.

Par exemple: les ouvrages suivants absolument fines

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

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

Si je change à ce qui suit, absolument rien ne se passe.

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'); 
    } 
}); 

Il semble donc que l'appel parse est de ne jamais être touché, à savoir je suppose que la charge de données faisant exploser d'une manière ou pense qu'il n'y a pas de données. Des idées? Merci.

p.s. c'est le plugin Jorn Zaefferer here.

Répondre

3

Assurez-vous que vous retournez un tableau et que vous autorisez les requêtes GET (dans le cas que vous utilisez ASP.NET MVC 2.0):

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

puis suivez les exemples:

$('#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; 
    } 
}); 

Fonctionne bien.

Remarque: FireBug aide à diagnostiquer les problèmes très rapidement car il vous montre exactement quelles sont les requêtes AJAX envoyées et pourquoi elles réussissent ou échouent.

+0

damn JsonRequestBehavior !!! ce n'est pas la première fois que ça m'arrive. – fearofawhackplanet

+0

C'est pourquoi FireBug est extrêmement utile. Vous obtenez immédiatement l'erreur. –

Questions connexes