Windows 2008上的JSON语法错误

时间:2012-07-11 22:22:22

标签: javascript json windows-server-2008-r2

我正在尝试实现JSON调用以在某个页面上模拟AJAX,其中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服务器时却没有,所以它没有似乎是一个浏览器问题。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

  • Parse JSON in JavaScript?

    var json ='{“result”:true,“count”:1}', obj = JSON&amp;&amp; JSON.parse(json)|| $ .parseJSON(JSON);

答案 1 :(得分:1)

首先,您正在使用同步通话(xhr.open('GET', url, false)),并且您还在使用onreadystatechange。这是错的。选择其中一个。

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

enter image description here

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

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