在xml标记

时间:2015-06-20 07:41:20

标签: javascript jquery xml xml-parsing base64

我尝试了这段代码,但它没有用。对于在xml标记中发送base64字符串的上述问题的任何建议或任何解决方案。 我已经搜索了很多关于使用这个xml标签(即xml解析)传递给java服务器的base64字符串,但没有得到任何结果。

function fileSelectedForLogo() {
    var oFile = document.getElementById('image_file').files[0];
	if(oFile.size/1024 <= 50){
    var oImage = document.getElementById('preview');
    var oReader = new FileReader();
	 oReader.onload = function(e){
        oImage.src = e.target.result;
		var resultStr = oImage.src;
		var result = resultStr.split(",");
		$('#LogoImageKey').val(result[1]);		
		};
		alert($('#LogoImageKey').val())
    oReader.readAsDataURL(oFile);	
	}else{
		alert(" Please Upload Less 50 KB ")
	}	
    }

function creatingXMLRequest(){
      var Name =	$('#Name').val();
      var logoImage		=  $('#LogoImageKey').val();
      alert(logoImage);
      var xml="<Request>" +
               "<Data>" +
               ifValueInsert(Name,"CName")+
               ifValueInsert(logoImage,"LogoImage")+
               "</Data>" +
			"</Request>";
     }

function ifValueInsert(value , tagName)
    {
	alert(value+" == "+tagName)
	if(value!=undefined && value!='' && value!=null)
	{
		return "<"+tagName+">"+value+"</"+tagName+">";
	}
	return "";
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<body> 
<input type="hidden" id="LogoImageKey" value="" />
    <label id="lblupload">Image Upload:</label>
    <input id="image_file" type="file" onChange="fileSelectedForLogo();" />
<input type="button" onClick="creatingXMLRequest();" value="Submit" />
  </body>

1 个答案:

答案 0 :(得分:5)

您的代码包含很多错误。我注释了其中一些:

    {li} alert($('#LogoImageKey').val()) fileSelectedForLogo:您在此处尝试访问$('#LogoImageKey').val()之前实际设置。实际上,此属性是在仅oReader.onload 之后调用的oReader.readAsDataURL(oFile)回调中设置的 在document.getElementById('preview')中的
  • fileSelectedForLogo:您正在寻找未定义的元素(至少在您的html代码段中)
  • $('#Name').val()再次定义一个未定义的元素(至少在你的html片段中)

这是工作代码。我冒昧地添加了一个缺少的元素以及一个div来包含图像的base64表示(并删除了几个警报)。我保留了你的基础结构(即使它可以使一些严重的重构受益),这样你就能更好地理解改变了什么。

&#13;
&#13;
function fileSelectedForLogo() {
  var oFile = document.getElementById('image_file').files[0];
  if(oFile.size/1024 <= 50){
    var oReader = new FileReader();
    oReader.onload = function(e){
      var resultStr = e.target.result;
      var result = resultStr.split(",");
      $('#preview').attr("src", e.target.result);
      $('#LogoImageKey').val(result[1]);
      $('#base64').text(result[1]);
    };
    oReader.readAsDataURL(oFile);	
  } else {
    alert(" Please Upload Less 50 KB ")
  }	
}

function encodeXML(str) {
  return str.replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&apos;');
}

function creatingXMLRequest(){
  var Name = $('#Name').val();
  var logoImage = $('#LogoImageKey').val();

  var xml="<Request>" +
    "<Data>" +
    ifValueInsert(Name,"CName")+
    ifValueInsert(logoImage,"LogoImage")+
    "</Data>" +
    "</Request>";
  console.log(xml);
}

function ifValueInsert(value , tagName) {
  //alert(value+" == "+tagName)
  console.log(value+" == "+tagName);
  if(value!=undefined && value!='' && value!=null) {
    return "<"+tagName+">"+encodeXML(value)+"</"+tagName+">";
  }
  return "";
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<body> 
  <input type="hidden" id="LogoImageKey" value="" />
  <label id="name-upload">Logo Name:</label>
  <input id="Name" type="text" value="" />
  <label id="lblupload">Image Upload:</label>
  <input id="image_file" type="file" onChange="fileSelectedForLogo();" />
  <input type="button" onClick="creatingXMLRequest();" value="Submit" />
  <img id="preview" src="" />
  <div id="base64" />
</body>
&#13;
&#13;
&#13;

一些一般性评论:

  • 在将数据附加到XML之前,您应该转义特殊字符<, >, ", &(这是encodeXML函数的作用)
  • 出于一致性原因,请避免混合使用javascript&#39; getElementById和jQuery选择器(例如$("#foo")
  • 再次为了保持一致性,请选择命名约定并坚持使用它。例如,使用元素ID选择驼峰分类字符串,下划线分隔字符串或破折号分隔字符串,但避免混合它们
  • 避免使用警报调试您的JavaScript代码。而是使用几乎所有浏览器现在提供的交互式javascript开发控制台并在那里记录调试信息(例如console.log(xml)
  • 请记住,base64图像占用的内存大约是原始
  • 的4/3倍