从ASMX webservice读取XML数据以进行Jquery自动完成

我和ASMX Web服务无法使用。 我们争吵。 她提出了我们过去的论点。 这是一种痛苦。 我们的关系在岩石上!

我有一个ASMX Web服务,我没有使用Newtonsoft库进行序列化(解释原因在这里: http : //encosia.com/2011/04/13/asp-net-web-services-mistake-manual-json – 序列化/ )。 它看起来像这样:

[WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public string[] GetCitiesWithState(string isoalpha2, string prefixText) { var dict = AtomicCore.CityObject.GetCitiesInCountryWithStateAutocomplete(isoalpha2, prefixText); string[] cities = dict.Values.ToArray(); return cities; } 

够简单吧? 它在搜索new时返回:

   New Orleans, Louisiana New York, New York  

我期待JSON,但经过一些阅读后,似乎我不应该尝试序列化输出 – 它应该恰好发生吗? 无论如何,所以我在前端有以下JQuery:

 $('#').autocomplete('', { dataType: 'json', httpMethod: 'POST', contentType: 'application/json; charset=utf-8', parse: function (data) { var rows = new Array(); for (var i = 0; i < data.d.length; i++) { rows[i] = { data: data.d[i], value: data.d[i].Value, result: data.d[i].Value }; } return rows; }, formatItem: function (row, i, n) { return row.Value; }, extraParams: { minChars: 2, isoalpha2: '', maxRows: 20, prefixText: function () { return $('#').val() } }, max: 20 }).result(function (event, data, formatted) { if (data) { alert(data['Key']); } }); 

我可以看到使用Chrome的通话:

人们可以在Chrome中看到什么

然而一切都发生了! 没有Jquery错误,没有烟花,没有任何东西。 她无视我。

起初我是在谴责网络服务,但我认为这可能与我如何在jquery中解析和格式化数据有关。

所以, 我的问题是 ,我做错了什么以及如何使自动完成工作正常?

帮助赞赏:)

编辑:它可能没有帮助,但这是我在提琴手中看到的:

在此处输入图像描述

jQuery UI自动完成不再使用formatItem方法。 那个和许多其他类似的方法出现在autocomplete的早期版本中,这是一个插件

我使用jQuery UI的自动完成重写了你的代码,它适用于我的下面的htm和asmx文件。

有关可以使用的更多方法,请参阅jQueryUI自动完成的演示。

我使用了www.json.org上的json2.min.js。我还将[System.Web.Script.Services.ScriptService]属性添加到Service1类中,以便可以直接从jQuery作为json Web服务调用它。

这些文章帮助了我:

ASMX和JSON – 常见错误和误解

使用jQuery来使用ASP.NET JSON Web服务

在ASP.NET AJAX中使用jQuery时要避免3个错误

htm文件

    jQuery to ASMX        

Hello, World!

asmx文件

 using System.Web.Script.Services; using System.Web.Services; namespace jQueryAutoCompleteBackEnd { ///  /// Summary description for Service1 ///  [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] [ScriptService] public class Service1 : WebService { [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public string[] GetCitiesWithState(string isoalpha2, string prefixText) { return new string[] { "New Orleans, Lousiana", "New York, New York" }; } } } 

asmx webmethod返回XML而不是JSON的原因是因为HTTP方法是GET而不是POST 。

要使自动完成插件使用POST,您必须使用回调函数实现source参数, 请参见此处