0

我正在尝试在 AJAX 面板不是可行选项的某个页面上实现 JSON 调用来模拟 AJAX。

当从下拉列表中选择州并填充县下拉列表时,我想调用我的 .aspx 页面。

在我的状态下拉列表中,我有这个电话:

onchange="jsonDropDownLoader('COUNTIES', this, 'Content2_DDLCounties')"

该调用在页面上,代码在这里:

function jsonDropDownLoader(sType, oParent, oChild) {
  var lstrChild = document.getElementById(oChild);
  var lstrFilter = ""

  if (oParent.value > "") {
    lstrFilter = oParent.value
  }

  lstrChild.options.length = 0;
  if (oParent.value > "") {
    var JSONobject = {};
    var http_request = new XMLHttpRequest();
    url = "/AltairWeb.NET/RS/jsonDropDownLoader.aspx?TYPE=" + sType + "&FILTER=" + lstrFilter
    http_request.open("GET", url, false);
    http_request.onreadystatechange = function () {
        var done = 4, ok = 200;
        if (http_request.readyState == done && http_request.status == ok) {
            JSONobject = JSON.parse(http_request.responseText);
        }
    };
    http_request.send(null);
    var JSONarray = eval('(' + http_request.responseText + ')').data
    for (var i = 0; i < JSONarray.length; ++i) {
        var optn = document.createElement("OPTION");
        optn.text = JSONarray[i].text;
        optn.value = JSONarray[i].value;
        lstrChild.options.add(optn);
    }
  }
}

它返回一个字符串,然后我用它来填充 County 下拉列表。

我正在取回数据,但它没有呈现在您的 QA 服务器上。使用带有 IE8 的开发人员工具,我可以看到我在这一行有一个错误:

JSONobject = JSON.parse(http_request.responseText);

它说没有声明 JSON。

它说我在这一行也有语法错误:

var JSONarray = eval('(' + http_request.responseText + ')').data

这在我的开发箱上完美运行。但是,我的开发盒上装有 WinXP / IIS 5,而我们的 QA 服务器是装有 IIS7.5 的 Win2008 服务器。我们有新的开发箱即将推出,但在那之前,我一直坚持使用 XP 机器。

由于它在本地工作,它似乎必须是 QA 服务器上的 Windows 或 IIS 的安全问题,可能与 http_request 调用有关,但我无法通过谷歌找到任何帮助我解决这个问题的东西。

我知道在 IE9 之前,我看到过 IE 不支持 JSON.parse 的帖子,但是当我指向我的开发服务器时,这在 IE8 中完美运行,但当我指向 QA 服务器时却不行,所以它似乎不是浏览器的问题。有任何想法吗?

4

2 回答 2

1

首先,您正在使用同步调用 ( xhr.open('GET', url, false)),并且您也在使用onreadystatechange. 这是错误的。选择一个或另一个。

https://developer.mozilla.org/en/xmlhttprequest

在此处输入图像描述

接下来,检查您的浏览器对 JSON 的支持。请参阅https://stackoverflow.com/a/891306/48082。如果您不确定,请使用json2.js来自 json.org 的内容。

最后,不要使用 eval。使用适当的 JSON 库。

于 2012-07-11T22:40:01.663 回答
1

JSON.parse() 是浏览器的功能,而不是服务器的功能。

确定区别是服务器......而不是你的客户端浏览器???

您可能还希望考虑使用 jQuery 之类的东西(它既可以简化您的编码,又可以帮助解决这样的跨浏览器问题)。例如:

于 2012-07-11T22:31:22.727 回答