Javascript XMLHTTPRequest未发布XML文件

Javascript XMLHTTPRequest未发布XML文件,javascript,jquery,html,xml,ajax,Javascript,Jquery,Html,Xml,Ajax,我有一个内容生成器,它包含文本框、文本区域和文件输入控件。所有控件都是HTML格式的。单击save按钮后,我将使用输入HTML控件的文本创建XML文档。最后,我希望提示用户下载XML文件。我希望我可以使用带有Javascript中XMLHTTPRequest的POST方法来实现这一点。一旦XML文档与XMLHTTPRequest一起发送,就会发生以下情况: Chrome:HTTP状态代码:304 IE10:什么也没发生 同样,我希望浏览器提示用户下载XML文件。这是我的密码 function g

我有一个内容生成器,它包含文本框、文本区域和文件输入控件。所有控件都是HTML格式的。单击save按钮后,我将使用输入HTML控件的文本创建XML文档。最后,我希望提示用户下载XML文件。我希望我可以使用带有Javascript中XMLHTTPRequest的POST方法来实现这一点。一旦XML文档与XMLHTTPRequest一起发送,就会发生以下情况:

Chrome:HTTP状态代码:304 IE10:什么也没发生

同样,我希望浏览器提示用户下载XML文件。这是我的密码

function generateBaseNodes() {
            var xmlString = '<?xml version="1.0"?>' +
                    '<sites>' +
                    '<site>' +
                    '<textareas>' +
                    '</textareas>' +
                    '<textboxes>' +
                    '</textboxes>' +
                    '<images>' +
                    '</images>' +
                    '</site>' +
                    '</sites>';

            if (window.DOMParser) {
                parser = new DOMParser();
                xmlDocument = parser.parseFromString(xmlString, "text/xml");
            }
            else // Internet Explorer
            {
                xmlDocument = new ActiveXObject("Microsoft.XMLDOM");
                xmlDocument.async = false;
                xmlDocument.loadXML(xmlString);
            }
            return xmlDocument;
        }

        function saveXmlFile(xmlDocument) {

            if (window.XMLHttpRequest) { // IE7+, Chrome. Firefox, Opera. Safari
                xmlhttp = new XMLHttpRequest();
            }
            else { // IE5 & IE6
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }

            xmlhttp.open('POST', 'http://localhost:57326/ContentGenerator.html', true);
            xmlhttp.setRequestHeader('Content-type','text/xml');
            xmlhttp.send(xmlDocument);
        }

        $('document').ready(function () {

            $('#templateTab a').click(function (e) {
                e.preventDefault()
                $(this).tab('show')
            })

            //Create TextArea XML elements and add them
            $('#btnSave').click(function () {
                var x;
                var xmlDocument = generateBaseNodes();

                $('.content').each(function () { // Textarea

                    if ($(this).attr('id') != undefined) {

                        if ($(this).is('textarea')) {
                            // create article node with control id.
                            articleNode = xmlDocument.createElement($(this).attr('id'));
                            // append node to xmldocument
                            x = xmlDocument.getElementsByTagName('textareas')[0];
                            x.appendChild(articleNode);
                            // append text
                            articleNode.appendChild(xmlDocument.createTextNode($(this).text()));
                        }

                        if ($(this).is('input[type=text]')) { // Textbox
                            textNode = xmlDocument.createElement($(this).attr('id'));
                            x = xmlDocument.getElementsByTagName('textboxes')[0];
                            x.appendChild(textNode);

                            textNode.appendChild(xmlDocument.createTextNode($(this).text()));
                        }

                    } else { // Show error if a control does not have an ID assigned to it.
                        alert('The' + $(this).prop('type') + 'has an undefined ID.');
                    }
                });

                $('.imageContent').each(function () {
                    if ($('.imageContent input[type=file]')) {  // Image url
                        // Validate file is an image
                        switch ($(this).val().substring($(this).val().lastIndexOf('.') + 1).toLowerCase()) {
                            case 'gif': case 'jpg': case 'png':
                                imageNode = xmlDocument.createElement($(this).attr('id'));
                                x = xmlDocument.getElementsByTagName('images')[0];
                                x.appendChild(imageNode);

                                imageNode.appendChild(xmlDocument.createTextNode($(this).val()));
                                break;
                            default:
                                $(this).val('');
                                // error message here
                                alert("not an image");
                                break;
                        }
                    }
                });

                saveXmlFile(xmlDocument);
            });
        });
函数generateBaseNodes(){
var xmlString=''+
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'' +
'';
if(window.DOMParser){
parser=新的DOMParser();
xmlDocument=parser.parseFromString(xmlString,“text/xml”);
}
else//internetexplorer
{
xmlDocument=newActiveXObject(“Microsoft.XMLDOM”);
xmlDocument.async=false;
loadXML(xmlString);
}
归还文件;
}
函数saveXmlFile(xmlDocument){
if(window.XMLHttpRequest){//IE7+,Chrome.Firefox,Opera.Safari
xmlhttp=新的XMLHttpRequest();
}
else{//IE5和IE6
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.open('POST','http://localhost:57326/ContentGenerator.html",对),;
setRequestHeader('Content-type','text/xml');
发送(xmlDocument);
}
$('document').ready(函数(){
$(“#模板选项卡a”)。单击(函数(e){
e、 预防默认值()
$(this.tab('show'))
})
//创建TextArea XML元素并添加它们
$('#btnSave')。单击(函数(){
var x;
var xmlDocument=generateBaseNodes();
$('.content')。每个(函数(){//Textarea
if($(this).attr('id')!=未定义){
if($(this).is('textarea')){
//创建控件id为的项目节点。
articleNode=xmlDocument.createElement($(this.attr('id'));
//将节点追加到xmldocument
x=xmlDocument.getElementsByTagName('textareas')[0];
x、 appendChild(articleNode);
//附加文本
articleNode.appendChild(xmlDocument.createTextNode($(this.text()));
}
if($(this).is('input[type=text]'){//Textbox
textNode=xmlDocument.createElement($(this.attr('id'));
x=xmlDocument.getElementsByTagName('textboxs')[0];
x、 appendChild(textNode);
appendChild(xmlDocument.createTextNode($(this.text()));
}
}else{//如果控件没有分配ID,则显示错误。
警报(“+$(this).prop('type')+”具有未定义的ID.);
}
});
$('.imageContent')。每个(函数(){
如果($('.imageContent输入[type=file]'){//图像url
//验证文件是一个图像
开关($(this.val().substring($(this.val().lastIndexOf('.')+1.toLowerCase()){
案例'gif':案例'jpg':案例'png':
imageNode=xmlDocument.createElement($(this.attr('id'));
x=xmlDocument.getElementsByTagName('images')[0];
x、 appendChild(imageNode);
appendChild(xmlDocument.createTextNode($(this.val()));
打破
违约:
$(this.val(“”);
//这里有错误消息
警报(“非图像”);
打破
}
}
});
saveXmlFile(xmlDocument);
});
});
我想我应该发布我的XML输出

sfdsfd
dsfsdf
dsfdsf
sdfsdf
自卫队
自卫队
sdfsdf
dsf
sdfa
sfdf
C:\Images\Header.png
C:\Images\Main.png
C:\Images\Deals.png
尝试使用让用户下载内存中的文件

还可以查看数据URI,如:


有没有办法让浏览器提示下载XML文件

是的。将数据转换为Blob,然后从中生成URL,您可以在
中使用该URL,为该
提供下载属性,浏览器现在知道它将被保存而不是打开,然后最后模拟单击它。比如,

函数txtToBlob(txt){
返回新的Blob([txt],{type:'plain/text'});
}
函数genDownloadLink(blob,文件名){
var a=document.createElement('a');
a、 setAttribute('href',URL.createObjectURL(blob));
a、 setAttribute('下载',文件名| |');
a、 appendChild(document.createTextNode(文件名| |'下载');
返回a;
}
函数下载(a){
返回a.dispatchEvent(新事件('click'));
}
//并使用它
var myText='foobar',
myFileName='yay.txt';
下载(
genDownloadLink(
txtToBlob(myText),
我的文件名
)
);
Have
<sites>
 <site>
 <textareas>
  <article1>sfdsfd</article1> 
  <article2>dsfsdf</article2> 
  </textareas>
 <textboxes>
  <title>dsfdsf</title> 
  <contentHeader>sdfsdf</contentHeader> 
  <linkContent>sdf</linkContent> 
  <link>sdfsd</link> 
  <relatedContent>sdfsdf</relatedContent> 
  <contentLink>dsf</contentLink> 
  <relatedArticle>sdfa</relatedArticle> 
  <articleLink>sfdf</articleLink> 
  </textboxes>
 <images>
  <imageHeader>C:\Images\Header.png</imageHeader> 
  <articleImage>C:\Images\Main.png</articleImage> 
  <articleImage2>C:\Images\Deals.png</articleImage2> 
  </images>
  </site>
  </sites>
<a href="data:application/octet-stream;charset=utf-8;base64,Zm9vIGJhcg==">text file</a>