この問題は解決したと思っていましたが、今回は別の問題のようですが、残念ながら解決していません。
クロスドメイン XHR を介して imgur API 写真共有サービスを使用したいのですが、どうやら正常に動作しているようです。リクエストを開始すると、xml が送信され、それを処理するだけで済みます。ただし、複数の提案にもかかわらず、Internet Explorer 9 では正しく実行できません (Chrome、Firefox で動作します)。これは私が試した最も単純なコードです:
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.
アイデア?.
ありがとう!