【问题标题】:Error appending select options with Jquery AJAX JSON使用 Jquery AJAX JSON 附加选择选项时出错
【发布时间】:2011-03-30 18:27:04
【问题描述】:

这是我返回的 JSON 字符串的第一部分(来自 firebug 中的 POST 响应)

{"d":"{\"companies\" : [{\"CompanyID\" : \"5\",\"CompanyName\" : \"(No Insurance Carrier)\"},{\"CompanyID\" : \"0\",\"CompanyName\" : \"(None Specified)\"},{\"CompanyID\" : \"72431\",\"CompanyName\" : \"A.M. Technologies, Inc./W.P. Hickman Systems\"},{\"CompanyID\" : \"72486\",\"CompanyName\" : \"AAA\"},...]}"}

这是 pageLoad 的脚本:

$.ajax({
    type: "POST",
    url: strURL + "/GetCompanyNames",
    contentType: "application/json; charset=utf-8",
    data: "{'strApplicationName':'hidden', 'strAPIkey':'hidden'}",
    dataType: "json",
    success: function(msg) {
       var options = $("#ddlCompany").attr('options');
         $('option', $("#ddlCompany")).remove();
         $("#ddlCompany").get(0).options[0] = new Option("Select Company", "-1");
           $.each(msg.d, function(item) {
              options[options.length] = new Option(item.CompanyName, item.CompanyID);
        });
     },
     error: function() {
        alert("Failed to load Companies");
     }
  });

我得到的错误是 CompanyName 未定义。谁能看到我在这里做错了什么?我需要先到达 msg.d 中的表格吗?

$.ajax({
                    type: "POST",
                    url: strURL + "/GetCompanyNames",
                    contentType: "application/json; charset=utf-8",
                    data: "{'strApplicationName':'hidden', 'strAPIkey':'hidden'}",
                    dataType: "json",
                    success: function(msg) {
                        $("#ddlCompany").get(0).options.length = 0;
                        $("#ddlCompany").get(0).options[0] = new Option("Select Company", "-1");
                        window.alert(msg.d);
                        for (var i = 0; i <= msg.d.companies.length - 1; i++) {
                            $("#ddlCompany").get(0).options[$("#ddlCompany").get(0).options.length] = new Option(msg.d.companies[i].CompanyName, msg.d.companies[i].CompanyID);
                        }

                    },
                    error: function() {
                        alert("Failed to load Companies");
                    }
                });

我也试过了,但没有找到公司。窗口警报完美地显示了 msg.d JSON。

所以这不是必需的,但是如果我将结果解析为 JSON,它可以在 Firefox 中工作,但在 IE 中不行?例如:

$.ajax({
                    type: "POST",
                    url: strURL + "/GetCompanyNames",
                    contentType: "application/json; charset=utf-8",
                    data: "{'strApplicationName':'hidden', 'strAPIkey':'hidden'}",
                    dataType: "json",
                    success: function(msg) {
                        if (msg.hasOwnProperty("d")) { msg = msg.d; }
                        var json = JSON.parse(msg);
                        $("#ddlCompany").get(0).options.length = 0;
                        $("#ddlCompany").get(0).options[0] = new Option("Select Company", "-1");
                        for (var i = 0; i <= json.companies.length - 1; i++) {
                            $("#ddlCompany").get(0).options[$("#ddlCompany").get(0).options.length] = new Option(json.companies[i].CompanyName, json.companies[i].CompanyID);
                        }
                    },
                    error: function() {
                        alert("Failed to load Companies");
                    }
                });

知道为什么这个脚本会挂在 IE 中吗?

【问题讨论】:

  • 我一定是遗漏了什么,你是说你的 msg 将等同于{companies: [{...}]} 吗?你循环中的msg.d 是什么意思?

标签: jquery ajax json select options


【解决方案1】:

为什么是msg.dd 在哪里?据我所知,应该是companies。该值作为第二个参数传递给回调,请参阅documentation:

$.each(msg.companies, function(index, item) {
    options[options.length] = new Option(item.CompanyName, item.CompanyID);
});

【讨论】:

  • 这是我在响应中得到 d 的地方:"d":"{\"companies\" : [{\JSON.... 我会尝试这些建议并做出回应。谢谢。
  • @user684485:好吧,你没有发布这个。那么你可能需要msg.d.companies
  • 很抱歉没有完全解释 Firebug 的 POST 响应。它是 {"d":"{\"companies\" : [{\"CompanyID\" : \"5\",\"CompanyName\" : \"(No Insurance Carrier)\"},{\"CompanyID \" : \"0\",\"CompanyName\" : \"(未指定)\"},{\"CompanyID\" : \"72431\",\"CompanyName\" : \"A.M.技术公司/W.P. Hickman Systems\"},{\"CompanyID\" : \"72486\",\"CompanyName\" : \"AAA\"},...]}"} “d”是 ASP 的函数。 NET AJAX 返回 JSON 序列化数据。 “d”充当容器对象
  • 更改 msg.d.companies 在公司休息
  • @user684485:嗯。但是您显然在 JSON 字符串中有 d.companies
猜你喜欢
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
相关资源
最近更新 更多