J'ai essayé pendant deux mois de faire fonctionner ce code, et je suis proche, mais toujours confus. Je souhaite que la fonction JQuery UI Autocomplete appelle un service Web qui renvoie des données JSON et affiche ces données pour la sélection, et lors de la sélection, place la valeur sélectionnée dans un champ masqué.JQuery UI Autocomplete WebService Source renvoyant JSON
Il existe plusieurs problèmes: 1) La fonction de saisie semi-automatique ne fonctionne pas 2) La source: "/AutoSuggest.asmx/DOTFind?" line renvoie une exception d'objet invalide 3) Le service nécessite deux paramètres: (chaîne prefixText, int count) - count lui indique le nombre d'enregistrements à renvoyer. 4) Je ne suis pas du tout certain que ce code acceptera les données JSON qui revient du service
Voici le code: <% @ Page Language = "C#" AutoEventWireup = "true" CodeFile = "Défaut2 .aspx.cs » Inherits = "Défaut2" %>
Untitled page
<script type="text/javascript">
if ($) {
$(document).ready(
function() {
$('h4').addClass('tmpFrameworkLoaded');
$('h4').text('jQuery successfully loaded and running!');
}
);
}
</script>
<style>
.ui-autocomplete-loading
{
background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat;
}
</style>
<div id="divDOTJQuery" runat="server">
<script type="text/javascript">
$(function() {
function log(message) {
alert(message);
$("<div/").text(message).prependTo("#log");
$("#log").attr("scrollTop", 0);
}
});
$("#dotmatch").autocomplete({
source: "/AutoSuggest.asmx/DOTFind?",
minLength: 2,
select: function(event, ui) {
log(ui.item ?
"Selected: " + ui.item.value + " aka " + ui.item.id :
"Nothing selected, input was " + this.value);
}
});
</script>
<div class="ui-widget">
DOT Job Title or #:
<input type="text" id="dotmatch" />
<input type="hidden" id="DOTNumber" name="DOTNumber" />
</div>
<div class="ui-widget" style="margin-top: 2em; font-family: Arial">
Results:<br />
<div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content">
</div>
</div>
</div>
</form>
et voici le service Web:
[WebMethod(BufferResponse = true, Description = "Lookup a DOT record using part of DOT Number or DOT Title")]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public string DOTFind(string prefixText, int count)
{
if (count == 0)
{
count = 10;
}
DOT D = new DOT();
DataView DV = D.View(prefixText, count);
List<DOT> items = new List<DOT>();
foreach (DataRow DR in DV.Table.Rows)
{
items.Add(new DOT(SQL.ColumnToString(DR, "DOTNumber").Trim(),SQL.ColumnToString(DR, "JobTitle").Trim()));
}
DataContractJsonSerializer serializer = new DataContractJsonSerializer(items.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, items);
string jsonString = Encoding.Default.GetString(ms.ToArray());
ms.Close();
return jsonString;
}
Je profondément reconnaissant de toute aide à ce que vous pouvez offrir.
Merci,
Bob
Merci pour cet indice.La fonction ne tire pas encore, donc ne peut pas tester. –
@Bob: Avez-vous vérifié les données renvoyées par votre service Web par d'autres moyens? c'est-à-dire en invoquant manuellement '/AutoSuggest.asmx/DOTFind?' ou quelque chose comme ça? –
Oui - J'ai vérifié le service Web et cela fonctionne très bien. Le problème en ce moment est que ma fonction de saisie semi-automatique ne se déclenche pas. –