我有两个网页; “Foo.aspx”和“Bar.aspx”。 Bar.aspx使用jQuery.ajax()
从Foo.aspx请求一串数据。 Foo.aspx只返回
<SerialNumber>12345-ABC</SerialNumber>
成功返回后,Bar.aspx将使用.find()
来显示
12345-ABC
以下是使示例更清晰的示例代码(简化):
Bar.aspx
<script type='text/javascript'>
$(document).ready(function () {
getData();
});
function getData() {
$.ajax({
url: '/Foo.aspx',
dataType: 'xml',
cache: false,
data: {cmd: 'sn'}
})
.success(parseData)
.error(displayError);
}
function parseData(data) {
var sn = $(data).find('SerialNumber').text();
$('#serialNumber').text(sn);
window.setTimeout(getData, 1000);
}
function displayError(error) {
$('#error').text('Error occurred getting data');
}
</script>
<div>
<label>Serial Number:</label>
<label id='serialNumber'></label>
</div>
<div id='error'></div>
Foo.aspx
public void Page_Load(object sender, EventArgs e)
{
string response = string.Empty;
if (Request.QueryString["cmd"] != null)
{
switch (Request.QueryString["cmd"])
{
case "sn":
response = "<SerialNumber>12345-ABC</SerialNumber>";
break;
}
}
Response.Write(response);
Response.Flush();
}
$ .ajax()调用一直没有任何问题。但是,根据我指定的dataType:
AND取决于我使用的浏览器类型(Chrome,Firefox或IE),.find()方法将会或不会起作用。更具体地说,数据12345-ABC
不会显示在浏览器中。
可能需要注意的是,我使用Fiddler2来观察从Foo.aspx返回的数据,而<SerialNumber>12345-ABC</SerialNumber>
字符串实际上是返回到Bar.aspx。换句话说,我知道数据存在于.find()中解析。
分解dataType和浏览器结果,这是我发现的:
dataType = "text or html or script or excluded"
时 - Chrome和Firefox成功显示序列号。另一方面,IE无法显示序列号。
当dataType = "xml"
- IE成功显示序列号时,Chrome和Firefox无法显示序列号。
为什么dataType会影响.find()的工作方式(或者不工作),更重要的是,我可以做些什么来让.find()在Chrome / FF / IE中工作而不必运行不同的代码基于浏览器类型?
答案 0 :(得分:1)
我怀疑你有标签案例问题。你可以安排让XML带回小写标签吗?
<serialnumber>12345-ABC</serialnumber>
然后你会在parseData
中执行此操作:
var sn = $(data).find('serialnumber').text();
如果您无法更改XML,请尝试仅更改parseData
。
HTML中的标签应该不区分大小写,但在XML中它们区分大小写。我通常将所有标签放在小写字母中,以便我不必处理浏览器,解析器或上下文混淆。