|
本帖最后由 flygis 于 2015-12-19 14:51 编辑
这两天发现baas send request 有时候感觉没有调服务端,就返回success 结果出现返回的参数未定义错误,这两天发现好多次,跟踪代码发现实际访问了服务器,但是服务端收到的request对象参数为null,所以直接返回了,改为用jquery ajax 对象发请求,就可以了。像这样: $.ajax({
type: "POST",
cache: false,
data: "action=chk&userid=" + userid,
async: false,
url: "/baas/baas/chkuser",
success: function(userinfo) {
。。。。
比如今天用http://bbs.wex5.com/forum.php ... ight=windowReceiver这个里面的示例代码,第一次提交没问题,如果更换图片再提交,就会出现这种情况,直接返回,报参数未定义错误。
前端js:
Model.prototype.file1Change = function(event){
//从选取文件对话框返回后,检查用户是否选择了文件,是否选择了图片文件
if(!event.target.files){
return;
}
var $image = $('.cropper-example-1 > img');
var $inputImage = $( this.getElementByXid('inputImage'));
var file = event.target.files[0];
if (/^image\/\w+$/.test(file.type)) {
var blobURL = URL.createObjectURL(file);
$image.one('built.cropper', function () {
URL.revokeObjectURL(blobURL); // Revoke when load complete
}).cropper('reset').cropper('replace', blobURL);
$inputImage.val('');
} else {
this.comp("messageDialog1").show({"message":'请选择图片文件!'});
}
};
Model.prototype.button2Click = function(event){
this.comp("button2").set({"disabled":true});
var self=this;
var picName=UUID.createUUID();
var result= $('.cropper-example-1 > img').cropper("getCroppedCanvas");
var imgdata=result.toDataURL();
if (imgdata == null)
{
return;
}
var params = {
"image":imgdata,
"subPath":"D:\\titlePic\\",
"PicName":picName
};
Baas.sendRequest({
"url" : "/baas/test", // servlet请求地址
"action" : "uploadImageAjax", // action
"params" : params, // action对应的参数
"success" : function(resultData) {//这里出现resultData未定义错误
if(resultData.success=="上传文件成功!"){
self.comp("windowReceiver1").windowEnsure(picName);
alert("上传文件成功!");
}else{
self.comp("messageDialog1").show({"message":result.success});
}
}, // 请求成功后的回调方法
});
};
后端服务:
//存储前台传过来的图片
private static void uploadImageAjax(ServletRequest request, ServletResponse response) throws ParseException, SQLException, NamingException, IOException {
// 参数序列化
JSONObject params = (JSONObject) JSONObject.parse(request.getParameter("params"));
JSONObject jsonObj = new JSONObject();
String image = params.getString("image"); //拿到字符串格式的图片
String subPath=params.getString("subPath");
String PicName=params.getString("PicName");
System.out.println(PicName);
// 只允许jpg
String header ="data:image/jpeg;base64,";
// 去掉头部
image=image.split(",")[1];
//image = image.substring(header.length());
// 写入磁盘
String success = "fail";
BASE64Decoder decoder = new BASE64Decoder();
try{
byte[] decodedBytes = decoder.decodeBuffer(image); //将字符串格式的image转为二进制流(biye[])的decodedBytes
String imgFilePath =subPath+PicName+".jpg"; //指定图片要存放的位置
FileOutputStream out = new FileOutputStream(imgFilePath); //新建一个文件输出器,并为它指定输出位置imgFilePath
out.write(decodedBytes); //利用文件输出器将二进制格式decodedBytes输出
out.close(); //关闭文件输出器
success = "上传文件成功!";
System.out.println("上传文件成功!");
}catch(Exception e){
success = "上传文件失败!|"+e.getMessage();
e.printStackTrace();
jsonObj.put("success", success);
}
finally{
jsonObj.put("success", success);
Util.writeJsonToResponse(response, jsonObj);
}
}
|
|