我以为这个问题已经解决了,但不幸的是它没有解决,尽管这次似乎是一个不同的问题。
我想通过跨域 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 的密钥(如果需要,您可以使用它......它仅用于测试目的,但我不认为收到的 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...');
}
});
dataType: ($.browser.msie) ? "text" : "xml"
据说告诉 IE 返回一个文本响应。尽管有所有这些保证,Content Type
但响应是application/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
正在射击,但它没有收到任何内容data
。那么我做错了什么?
在这里你可以有一个小提琴(包括 Jquery Form Plugin)。
更新:
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.
想法?
谢谢!