如何解决jQuery的.find的行为基于ajax.dataType
| 我有两个网页; \“ Foo.aspx \”和\“ Bar.aspx \”。 Bar.aspx使用“ 0”从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()调用可以始终如一地正常工作。但是,根据我指定为“ 5”的语言以及取决于我使用的浏览器类型(Chrome,Firefox或IE),. find()方法将起作用或将不起作用。更具体地说,数据“ 6”不会显示在浏览器中。
可能很重要的一点是,我使用Fiddler2来查看数据是从Foo.aspx返回的,事实上,ѭ7字符串是返回到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中工作而不必运行基于浏览器类型?
解决方法
我怀疑您遇到标签问题。您可以安排XML返回带有小写字母的标记吗?
<serialnumber>12345-ABC</serialnumber>
然后您将在parseData
中执行此操作:
var sn = $(data).find(\'serialnumber\').text();
如果您无法更改XML,请尝试仅更改parseData
。
HTML中的标签应该区分大小写,而XML中的标签则区分大小写。我通常通过将所有标签都置于小写来避免整个案例的问题,这样我就不必处理浏览器,解析器或上下文混乱的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。