Ajax:为啥response.responseXML返回的值为空?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax:为啥response.responseXML返回的值为空?相关的知识,希望对你有一定的参考价值。

为什么response.responseText返回的有值,而response.responseXML返回的值为空?

1. 你设置了content type = text/xml了么?
(本人在遇到上述问题时就是由这个问题解决的,程序为了强制使用utf-8,就使用了一句header("Content-Type: text/html;charset=UTF-8"),。。后果大家已经知道了。)
2. 确定你的请求发送到了服务器并返回了 ?
3. 当你alert/检查 responseText的时候,是否看到其他一些不该有的信息?(例如xml信息)
4. 直接打开在浏览器中打开xml文档。(浏览器中输入请求页面,这个可能你需要传递参数或者构建一个表单。)浏览器会告诉你你的xml文档格式是否正确。正确么?
var xmlData = response.responseXML;
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(response.responseText);
xmlData=xmlDoc;
参考技术A 判断方式如下:
1、用的js原生的ajax的话,可以使用if(null!=xhr.responseText&&“”!=xhr.responseText.trim())来判断。
2、如果使用的jq的ajax,可以再success:function(data)
if(null!=data&&“”!=data.trim())
//不为空的操作


当然,具体的逻辑还是根据需求。null还是空串是不是都认为空。

为啥不允许跨域 AJAX 调用?

【中文标题】为啥不允许跨域 AJAX 调用?【英文标题】:Why Cross-Domain AJAX call is not allowed?为什么不允许跨域 AJAX 调用? 【发布时间】:2011-07-19 23:25:37 【问题描述】:

除了 JSONP,为什么要遵循相同的域策略?

【问题讨论】:

重复:Why are AJAX requests limited to same domain? 和 Why is cross-domain Ajax a security concern? What's the point of the Anti-Cross-Domain policy?的可能重复 【参考方案1】:

因为Same origin policy。

存在同源策略以防止恶意使用资源。如果没有管理跨域脚本访问的规则,那么对毫无戒心的用户造成各种破坏将是微不足道的。例如,恶意网站很容易将您的会话信息抓取到另一个站点并代表您执行操作。

举个例子,考虑一下:

您访问您最喜欢的网络邮件程序 - 它可以是 Gmail、Yahoo 邮件、Hotmail 或私人内部公司网络邮件程序。

登录并检查您的电子邮件后,您单击指向恶意网站的链接,该网站在新标签页中打开。

恶意网站检查 http 引用并发现您来自您的电子邮件帐户。

使用跨域脚本,恶意网站会回到您的电子邮件选项卡并下载您的地址簿和所有电子邮件(或者在您关闭弹出窗口之前可以获取的任何电子邮件)。

随后,在扫描您的电子邮件以获取密码、财务数据和其他敏感材料后,它会向您的所有联系人发送一封您认可同一网站的电子邮件。 这只是一个例子。更阴险的情节是恶意第三方利用您的浏览器爬取您公司的内网,将您作为不知情的帮凶泄露机密信息!

更多关于http://jimbojw.com/wiki/index.php?title=Introduction_to_Cross-Domain_Ajax

【讨论】:

【参考方案2】:

出于安全原因,已实施同源政策​​;引用wikipedia的相关句子:

这种机制具有特定的 现代网络的意义 广泛依赖的应用程序 在 HTTP cookie 上维护 经过身份验证的用户会话,如 服务器根据 HTTP cookie 进行操作 泄露敏感信息 信息或采取状态改变 行动。 严格的分离 在不相关提供的内容之间 网站必须在客户端维护 侧面防止数据丢失 机密性或完整性。

基本上,您不希望任何给定的网站 (就像您可能正在浏览的任何网站一样 - 我们都知道人们有时会访问您不应该信任的网站)访问来自任何其他人的数据(例如您的网络邮件或社交网络上的帐户)

【讨论】:

使用新鲜的 cookie 能否轻松避免安全问题?

以上是关于Ajax:为啥response.responseXML返回的值为空?的主要内容,如果未能解决你的问题,请参考以下文章

为啥互不执行多个ajax请求?

JavaScript, Ajax - 为啥 JavaScript 代码上的 Ajax 函数不能正常运行?

Ajax:为啥成功显示为 0?

为啥不能将父ajax调用的参数访问到子ajax调用中

为啥 AJAX 返回 HTTP 状态码 0?

django为啥不能实现ajax