gpt4 book ai didi

javascript - 在 IE9 中解析 xml/json 响应

转载 作者:行者123 更新时间:2023-11-28 09:51:34 24 4
gpt4 key购买 nike

我以为这个问题was resolved但不幸的是事实并非如此,尽管这次似乎是一个不同的问题。

我想通过跨域XHR使用imgur API照片共享服务,显然,它工作得很好。我发起一个请求,他们发送一个 xml,我所需要做的就是处理它。然而,尽管有多种建议(适用于 Chrome、Firefox),但我无法在 Internet Explorer 9 中正确执行此操作。这是我尝试过的最简单的代码:

HTML:

<!DOCTYPE html>
<html>
<body>
<form id="uploadForm" action="http://api.imgur.com/2/upload.xml" method="POST" enctype="multipart/form-data">
<input type="hidden" name="key" value="00ced2f13cf6435ae8faec5d498cbbfe"/>
File: <input type="file" name="image"/>
Return Type: <select id="uploadResponseType" name="mimetype">
<option value="xml">xml</option>
</select>
<input type="submit" value="Submit 1" name="uploadSubmitter1"/>
</form>
<div id="uploadOutput"></div>
</body>
</html>

在那里你可以看到 Imgur API 的 key (如果你愿意,你可以使用它......它仅用于测试目的,但我不认为我收到的 xml 响应有任何问题)。

我正在使用Jquery Form Plugin管理文件上传。

XML:

<小时/>

这是我测试过的最简单的代码。通常,我们需要帮助Internet Explorer独立解析xml,这就是我有parseXml的原因。

Javascript:

function parseXml(xml) {  
if (jQuery.browser.msie) {
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML(xml);
xml = xmlDoc;
}
return xml;
}

$('#uploadForm').ajaxForm({
dataType: ($.browser.msie) ? "text" : "xml",
accepts: {
xml: "text/xml",
text: "text/xml"
},
// has been received
success: function(data) {
$('#uploadOutput').html('Submitting...');
data = parseXml(data);
console.log(data);
alert(data);
},
complete: function(data) {
$('#uploadOutput').html('Complete...');
}
});

数据类型:($.browser.msie) ? "text": "xml" 据说告诉 IE 返回文本响应。尽管有所有这些保证,响应的 Content Typeapplication/xml (有人告诉我这不是问题)。作为 xml,我收到以下内容:

<?xml version="1.0" encoding="utf-8"?>
<upload><image><name/><title/><caption/><hash>087Y0</hash><deletehash>gUcgywjXoJyAJp6</deletehash><datetime>2012-06-02 21:59:35</datetime><type>image/jpeg</type><animated>false</animated><width>1024</width><height>768</height><size>297623</size><views>0</views><bandwidth>0</bandwidth></image><links><original>http://i.imgur.com/087Y0.jpg</original><imgur_page>http://imgur.com/087Y0</imgur_page><delete_page>http://imgur.com/delete/gUcgywjXoJyAJp6</delete_page><small_square>http://i.imgur.com/087Y0s.jpg</small_square><large_thumbnail>http://i.imgur.com/087Y0l.jpg</large_thumbnail></links></upload>

我认为它看起来不错,我可以使用类似 $($.parseXml(xml)).find('original').text() 在其他浏览器中解析它,但不能在IE9。所以基本上,我收到了响应,但无法解析该 xml,尽管当我尝试弄清楚我在 IE 中得到的内容时,看起来我什么也没得到。

此外,success 甚至没有触发,这是 IE9 无法解析 xml 的信号。 complete 正在触发,但它没有收到任何数据。那么我做错了什么?

在这里你可以有一个fiddle (包括 Jquery 表单插件)。

更新:

JSON

<小时/>

供将来引用,在这种情况下,JSON 将无法使用 Jquery Form Plugin 工作。来自文档:

The iframe element is used as the target of the form's submit operation 
which means that the server response is written to the iframe. This is fine
if the response type is HTML or XML, but doesn't work as well if the response
type is script or JSON, both of which often contain characters that need to
be repesented using entity references when found in HTML markup. To account
for the challenges of script and JSON responses when using the iframe mode,
the Form Plugin allows these responses to be embedded in a textarea element
and it is recommended that you do so for these response types when used in
conjuction with file uploads and older browsers.

想法?

谢谢!

最佳答案

这是由于跨域安全性,称为同源策略。

如果该插件由浏览器实现(例如在 Chrome 中),则该插件将使用文件 API,如果不是,则它会使用一个巧妙的技巧来创建隐藏的 iframe 并向其发布数据。如果地址位于其他域,则插件无法从 iframe 获取数据,因此会失败。

尝试使用以下命令启用插件的 Debug模式:$.fn.ajaxSubmit.debug = true;您将看到幕后发生的事情。

<罢工>不幸的是,上传的唯一方法是在 HTML 中使用隐藏的 iframe,而不是通过脚本添加,并通过传递参数 iframeTarget 强制发布到它。使用此 iframe 的选择器,但由于上述问题,您将无法获取响应(我不知道为什么插件生成的 iframe 不发布数据):

<罢工>

JS:

$('#uploadForm').ajaxForm({
iframeTarget: ($.browser.msie) ? "#iframeTarget" : false,
...

HTML:

<iframe name="iframeTarget" id="iframeTarget">This iframe can be hidden with CSS</iframe>

您还可以使用条件注释对其他浏览器隐藏 iframe:

<!--[if IE]>
<iframe name="iframeTarget" id="iframeTarget">This iframe can be hidden with CSS</iframe>
<![endif]-->

对此的注释是 success回调不会触发。

编辑:

您正在与此网站通信吗 JSON响应选项?

如果有,您可以使用 jsonp作为 dataType参数,添加 ?callback=someFunction到 url 末尾并写入 someFunction(data){}接收数据并以与 success 相同的方式解析它回调。

关于javascript - 在 IE9 中解析 xml/json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10866439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com