我正在尝试实现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服务器时却没有,所以它没有似乎是一个浏览器问题。 有什么想法吗?
答案 0 :(得分:1)
JSON.parse()是浏览器的功能,而不是服务器。
你确定区别于服务器...而不是你的客户端浏览器???
您可能还希望考虑使用类似jQuery的东西(它可以简化您的编码,并帮助调解这样的跨浏览器问题)。例如:
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
接下来,检查您的浏览器支持JSON。见https://stackoverflow.com/a/891306/48082。
如果您不确定,请使用json.org中的json2.js
。
最后,不使用eval 。使用适当的JSON库。