用ajaxFileUpload實現圖片上傳,圖片已經成功上傳,json也有返回,xml也正確配置。但是在jsp中ajaxFileUpload始終執行error方法。
用來碰巧將ajaxFileUpload 中的error方法改寫成以下的樣子(如果您已知道您報的是什麼錯,請無視這一部分。只是寫給跟我一樣的很白很白的小白)
error:function(data,status,e){
alert(e);
}
再次執行後,出現上面的窗口。這下可開心了。因爲之前問度娘說爲何總是執行error時,得到的答案不是說jquery版本太高了,要1.4.2以下才能;不然就說是ajaxFileUpload源文件中要怎麼怎麼改。附上圖,也許對你有用
針對 SyntaxError: expected expression, got '< 這個錯誤,我搜索到兩篇文章,雖然不能直接解決我的問題,但也間接解決了我的問題。也許對你也有用
http://liwx2000.iteye.com/blog/1540321
http://witcheryne.iteye.com/blog/406574
看了第二篇文章後,我也開始用firebug 跟蹤數據: 在error方法中添加console.info(data);
這是action返回給jsp的:
這是Firefox中看到的
看!果然也是因爲多了<pre></pre>標籤
這下就好辦了,只要把標籤去掉就行。去掉標籤的方法上面兩篇文章都有。因此不多說。我是按第二篇文章的方法處理的。
下面是代碼
js
function ajaxFileUpload(){
$.ajaxFileUpload({
url:"<%=path%>/file/imageupload.action?imgtype=lecturer",
secureuri:false,
dataType:"json",
fileElementId:"uploadFile",
success:function(data,status){
console.info("3333333"+ data);
if(data.flag==true){
alert(data.msg);
$('#uploadDialog').dialog('close');
}else{
alert(data.msg);
$('#uploadDialog').dialog('close');
}
},
error:function(data,status,e){
console.info("1111111"+data);
alert(e);
}
});
}
ajaxFileUpload.js
uploadHttpData: function( r, type ) {
var data = !type;
data = type == "xml" || data ? r.responseXML : r.responseText;
// If the type is "script", eval it in global context
if ( type == "script" )
jQuery.globalEval( data );
// Get the JavaScript object, if JSON is used.
if ( type == "json" ) {
//以下是新增的代碼
if(data.indexOf('<pre>') != -1) {
data = data.substring(5, data.length-6);
}
//以上是新增的代碼
eval( "data = " + data );
}
// evaluate scripts within html
if ( type == "html" )
jQuery("<div>").html(data).evalScripts();
//alert($('param', data).each(function(){alert($(this).attr('value'));}));
return data;
}
這裏做新增代碼處理即可,其他的不用改變
FileAction
public class FileAction extends ActionSupport{
private static final long serialVersionUID = 8224125473579297368L;
private File file; //上傳的文件
private String fileFileName; //上傳的文件名
private JSONObject resultObj = null;
public String imageupload() throws Exception {
//這裏實現上傳圖片功能
String path = null;
String message = null;
boolean flag = false;
JSONObject json = new JSONObject();
json.put("msg", message);
json.put("path", path);
json.put("flag", flag);
setResultObj(json);
return SUCCESS;
}
這裏的resultObj不能定義爲String,也就是說不能向前臺傳json字符串,否則data.flag即使是true,data.flag==true也不會成立
struts.xml
<span style="font-size:18px;"> <package name="file" extends="json-default" namespace="/file">
<action name="imageupload" class="com.bossin.common.action.FileAction" method="imageupload">
<result name="success" type="json">
<param name="root">resultObj</param>
</result>
</action>
</package></span>