【问题标题】:Error when using jquery webservice call to populate dropdownlist使用 jquery webservice 调用填充下拉列表时出错
【发布时间】:2012-02-01 14:41:08
【问题描述】:

由于某种原因,当我测试将 json 字符串解析为下拉列表时,它可以这样做

  var json = [{ "Id": "12345", "WorkUnitId": "SR0001954", "Description": "Test Service Request From Serena", "WorkUnitCategory": "ServiceRequest" }, { "Id": "12355", "WorkUnitId": "WOR001854", "Description": "Test Work Order From Serena", "WorkUnitCategory": "ServiceRequest" }, { "Id": "12365", "WorkUnitId": "DBR001274", "Description": "Test Database Related Service Request From Serena", "WorkUnitCategory": "ServiceRequest"}];

            $(json).each(function() { comboboxWorkUnit.append($('<option>').val(this.Id).text(this.WorkUnitId)); });

但是,当我尝试从我的网络服务中获取 json 并将其放入下拉列表时,我收到一条错误消息,提示 下拉列表不支持此方法

$.ajax({   
type: "POST",   
url: "Services/WorkUnitService.asmx/WorkUnit",   
data: "{'Number' : '" + Number.text()  + "','Id': '" + combobox.val() + "','workerType': '" + EmployeeType + "'}",   
contentType: "application/json; charset=utf-8",   
dataType: "json",   
success: function(json) {
$(json).each(function() { comboboxWorkUnit.append($('<option>').val(this.Id).text(this.WorkUnitId)); });

} }); 

我也试过调用webservice方法但是报错

  $.postJSON("Services/WorkUnitService.asmx/WorkUnitsForParAndPhase", "{'parNumber' : '" + parNumber + "','phaseId': '" + combobox.val() + "','workerType': '" + EmployeeType + "'}", function(data) {
        alert(data.toString()); 
        }); 

我试过这个从来没有调用过网络服务

 $.getJSON('Services/WorkUnitService.asmx/WorkUnitsForParAndPhase' + parNumber + '/' + combobox.val() + '/' + EmployeeType,
    function(myData) {
        alert(myData.toString());
    });

【问题讨论】:

  • 追踪this看它是在获取json数据还是父数据

标签: jquery web-services drop-down-menu


【解决方案1】:

您可以尝试使用Fiddler2 并测试您发送到您的网络服务的请求。

下面是一个与您正在做的事情类似的工作示例,除了使用 GET。

$.getJSON('Service.asmx?data=123', function (data) {
    var html = '';
    var len = data[0].length;
    for (var index = 0; index < len; index++) {
        html += '<option value="' + data[0][index] + '">' + data[1][index] + '</option>';
    }
    $('#yourDivId').append(html);
});

【讨论】:

  • 这两种方法有什么区别
  • 从服务器调用数据的方法在你的情况下并不重要,你当然可以保留你当前使用的ajax“POST”。我只是想提供一个调试请求的建议,以及填充下拉列表的另一个想法。这是另一篇关于在 Fiddler 中创建该请求的帖子。
【解决方案2】:

我没有意识到在asp.net中使用jquery调用我们需要使用.d的web服务时

$.ajax({  
   type: "POST",
     url: "Services/WorkUnitService.asmx/WorkUnit",
     data: "{'Number' : '" + Number.text()  + "','Id': '" + combobox.val() + "','workerType': '" + EmployeeType + "'}",
     contentType: "application/json; charset=utf-8",  
   dataType: "json",
     success: function(json) {  
$(json).each(function() { 
alert(json.d);
 });    

【讨论】:

    【解决方案3】:

    您确定您的服务返回 JSON 对象吗?

    【讨论】:

    • 嗯,我相信它会返回一个 json 字符串
    • 因为它正在使用 JavaScriptSerializer 进行序列化
    猜你喜欢
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多