ajaxfileupload 始終不執行success 只執行error方法;SyntaxError: expected expression, got '

用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>


發佈了23 篇原創文章 · 獲贊 20 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章