3

好的,所以 JQuery 的自动完成小部件让我发疯!
我尝试了多种加载小部件的方法。我目前得到以下信息:

错误:未调用 jQuery15105511000803127266_1353087819681 - parsererror

并且响应值(来自萤火虫)似乎是System.string[]虽然我不确定它是一个字符串,它的值是System.string[]还是一个实际的system.string[]对象。

我只是愚蠢,还是我错过了什么(请善待你对最后一个问题的回答......)?

我的 javascript 是:

$("#clientName").autocomplete({
    source: function (request, response) {
        $.ajax({
            url: "/supplier/apSupplierSearch/",
            data: { searchAPName: clientName.value },
            dataType: "json",
            type: "POST",
            success: function (data) {
                //response(data);
                response($.map(data, function (item) {
                    return {
                        label: item.Name,
                        value: item.Name
                    }
                }))
            }
        }); // ajax
    }, // function [{
    scroll: true,
    scrollHeight: 600,
    minLength: 4
});

我的网络方法是:

[WebMethod]
public string[] apSupplierSearch(string searchAPName)
{
    IList<int> selectedPropertyIDs = new List<int>();
    string currentRole = UserServices.GetCurrentRole();
    Property currentProperty = UserServices.GetCurrentPropety();
    List<ApSupplier> suppliers = ApSupplierQueries.GetApSuppliers(searchAPName, selectedPropertyIDs, currentRole, currentProperty);
    List<string> supplierList = new List<string>();
    foreach (ApSupplier supplier in suppliers)
    {
        supplierList.Add(supplier.Name);
    }
    return supplierList.ToArray();
}
4

3 回答 3

2

我对 C# 不太熟悉,但您可能想要打印供应商列表而不是返回它。在做 AJAX 时,您实际上必须输出数据,而不仅仅是从方法中返回它(但这可能是我对语言的误解)。

其次,您需要使用库从 toArray() 创建的数组中创建 JSON 字符串。否则,jQuery 不会将响应识别为 JSON 并且不会解析它。

于 2012-11-16T18:14:21.260 回答
0

当您指定 dataType:"jsonp" 而不是 JSON 时,您得到的错误似乎是某种跨域问题。这让我想知道为什么你会收到这个错误,因为你有 dataType:"json"。

我有一段类似的代码,对我来说似乎工作正常。我服务中的方法是“GET”类型。这里是:

    var availabletags=new Array();

    CallService2("GET", "ServiceUrl",
        function (data) {
            if (data) {
            $.each(data, function (index, item) {
                    availabletags.push(item);
                });
        },
        function (result) {
            alert('Service call failed: ' + result.status + '' + result.statusText);
        });

    function CallService2(method, serviceUrl, successHandler, errorHandler) {
    $.ajax({
        type: method,
        url: serviceUrl,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: successHandler,
        error: errorHandler
        });
    }

    $(function() {  
    $( "#tags" ).autocomplete({
        source: availableTags
    });
});

在页面加载之前调用此代码。让我知道它是否有帮助。一切顺利......

于 2012-11-16T19:12:09.273 回答
0

够有趣的。它看起来像一个 JQuery JSONP 错误,但您使用的是 json。您确定错误与您附加的代码相对应。请参阅相关问题: 使用 jsonp 内容类型的 jQuery.ajax 请求后的 parsererror

于 2012-11-16T23:23:43.967 回答