PHP – jQuery 使用ajaxFileUpload套件的錯誤
使用 AJAX 上傳套件(Jquery Ajax File Uploader Version 2.1) 時遇到錯誤,這邊有好心的網友提供了說明….
主要是jquery版本中被拿掉handleError()的關係,以及加解JSON格式時的錯誤問題。按照這裡修改就成功了!
如果不用JSON格式而改用xml格式,那就不會發生這些問題囉!
請大家先參考過官方的範例檔:ajaxfileupload.php
先簡單說明其中的主要程式碼架構….
function ajaxFileUpload()
{
$("#loading")
.ajaxStart(function(){
$(this).show();//上傳時的動畫
})
.ajaxComplete(function(){
$(this).hide();//上傳完畢的動畫
});
//開始上傳的程式碼
$.ajaxFileUpload
(
{
url:'doajaxfileupload.php', //接收上傳的php程式碼
secureuri:false, //不太清楚這個,應該是加密的什麼東西吧
fileElementId:'fileToUpload', //你的的id
dataType: 'json', //格式可選用xml或json,基本上我習慣用json
data:{name:'logan', id:'id'}, //你要夾帶的參數
success: function (data, status) //當成功時呼叫的funciton
{
if(typeof(data.error) != 'undefined')
{
if(data.error != '')
{
alert(data.error);
}else
{
alert(data.msg);
}
}
},
error: function (data, status, e) //失敗時呼叫的funciton
{
alert(e);
}
}
)
return false; //記得要false避免表單送出
}
以上是官方的js,把json改成xml沒問題,但若要用json請參考大陸網友的說明吧!
——————————————————————————————————————————————————-
1 2 3 |
<strong>在做ajaxFileUpload时,我也遇到这个问题,同时还有其它的问题,用了一下午的时间解决了:<br>问题1:如楼主所说,jQuery.handleError is not a function 原因是,经测试handlerError只在jquery-1.4.2之前的版本中存在,jquery-1.6 和1.7中都没有这个函数了,因此在1.4.2中将这个函数复制到了ajaxFileUpload.js中,问题解决<br>handleError: function( s, xhr, status, e ) {<br>// If a local callback was specified, fire it<br> if ( s.error ) {<br> s.error.call( s.context || s, xhr, status, e );<br> }<br><br> // Fire the global callback<br> if ( s.global ) {<br> (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );<br> }<br> },<br>问题2:一直得到error ,无法执行指定的success方法。通过追踪ajaxFileUpload的执行过程发现,在调用它自身的uploadHttpData函数时,当执行if(type=="json") eval("data = "+data);<br>会抛出异常,导致在处理异常的时候将status = "error" 因此一直执行error方法。<br>上网查询,得知eval函数是用来执行一段js代码,而并不是如我所想的反解json串<br>eval("data = "+data);的意思是 将data 赋值给 data参数 ,但是当我返回给页面的是一个简单的字符串,比如"OK" ,时,这样写就抛出异常。最后改为 eval("data = \" "+data+" \" ");即将返回的数据用双引号引起来当作字符串,然后赋给 data 。终于成功了。。。<br>贴出来,希望可以帮助到其他同样遇到这个问题的人。</strong> |
from : http://zhidao.baidu.com/question/351817654.html
——————————————————————————————————————————————————-
後來我還遇到小問題….
就是callback的時候,php使用json_encode(),會發生錯誤,
所以請網友注意一下上面改寫的這段…..eval("data = \" "+data+" \" ");
//如果php格式輸出的json格式長這樣{"act" : "hellow"} 那這裡要使用單引號 "data = \' "+data+" \' "
//如果php格式輸出的json格式長這樣{'act' : 'hellow'} 那這裡要使用雙引號 "data = \" "+data+" \" "
//因為PHP的json_encode是{"act" : "hellow"}所以我使用單引號"data = \' "+data+" \' "