jquery.uploadify动态传递表单元素
jquery.uploadify动态传递表单元素
在给网站开发的时候,璞玉需要用到uploadify这个上传插件,在使用的时候,遇到一个问题就是通过前端的上传脚本,把一个动态的数据传递到上传后台处理页面做一个参数。
看了手册之后发现有一个接口,可以使用。那就是’scriptData’,(这个是在Uploadify3.0的版本下才有,3.0以上改为formData).
在使用uploadify时,如果使用初始化参数的方式传递参数,会发现修改过的表单元素传不到后台。
'scriptData' : {'ttype':document.getElementById('name').value},
仔细分析了一下,这里传递的参数是表单初始化的时候值,所以一定是空的,或者是默认的。
解决方法是在提交表单时,加上这么一句代码:
<a href="javascript:$('#uploadify').uploadifySettings('scriptData',{'ttype':document.getElementById('name').value}); jQuery('#uploadify').uploadifyUpload()">开始上传</a>
注意书写格式,不然会出错的。
如果对uploadify 参数不是很了解的话,可以参考之前写的那篇《Uploadify与php使用详解》 ,里面每个参数都有注解。希望对大家有帮助!有问题可以直接留言。
安
最近开发用到了Uploadfy,在一个页面加载一个的时候还好,现在有需求是要在一个页面添加多个附件上传组件,因为我是用jquery在Uploadfy外面封装了一层,而且具体放几个附件上传组件又是动态添加的。。现在弄的头昏脑胀。不知道博主是否有过此类经验,能否给点意见?
pooy
多个附件添加那个是用户的事情,你直接把组建写好即可呢。有问题可以与我交流。
oooo
我的是用Java写的后台,执行onComplete一直没有反应 ? 这是为什么 ?’script’ 应该是这个里面服务端代码返回一个值的。。。。。貌似没有效应
pooy
请问您的版本是多少的呢?
pooy
‘script’ 是执行的
‘script’: ‘js/uploadify.php’,//实现上传的程序
oooo
版本是最新的。。。。
oooo
那请问如何实现ajax的异步操作来判断文件是否已经存在。。。。? 谢谢了
pooy
请移步到:uploadify 后台处理 对您的问题已进行解答。
ryouga
不知道你的代码是在3.X的哪个版本,我在3.2下里这样写是不行的,需要改成:
$(“#file_upload”).uploadify(‘settings’, ‘formData’, { key : value } );
$(“#file_upload”).uploadify(‘upload’);
在3.2的版本中好像已经没有scriptData这样的对象了
pooy
你说的很对,在uploadify 3.1+的版本就把scriptData这个对象换成了formData了,因为这个formData跟贴切一些。我在文章中有提出的!
tidy
我也是这样传参数的,假如我的ttype的值是中文,到服务器端就会变成u6821u51C6u7535u6D41这样
程娇
请问一下,传参中中文变成一串乱七八糟的字符该怎么解决
pooy
转码即可
tidy
我也是这样传参数的,假如我的ttype的值是中文,到服务器端就会变成u6821u51C6u7535u6D41这样,如果你有遇到过,请发邮件告诉我解决方法,谢谢
pooy
你可以通过转码之后再传递,后台处理那边转一下就好了。
小伙子
博主您好,首先非常感谢您这篇文章的无私奉献! 最近在开发时用到了uploadify,大致需求是这样的,前台用户选择文件类型,如:图片、文档或rar,请问这个类型参数如何传递,传递到哪里做判断比较好及如何判断,请博主给予思路(最好有解法). 拜谢。
pooy
这个问题,你可以这样做,你在前台给用户设计几个按钮,分别是你说的那些类型,然后通过点击这个按钮传递类型到 这两个选项下:
‘fileDesc’: ‘*.jpg;*.jpeg;*.gif;*.png;’,
‘fileExt’: ‘*.jpg;*.jpeg;*.gif;*.png;’,
然后用户选择文件的时候就是只能是之前选定的类型。
asp.net开发
你好。能不能发个例子给我。 最好可以添加图片备注的。谢谢你了。 邮箱:[email protected]
pooy
uploadify3.1 PHP+formData动态传值 Dome下载
罗迦费升格
楼主,请教一个问题。
uploadify 的onselecterro
我定义了一个中文错误信息,但是弹出中文错误信息后,还是会弹出英文的。这个怎样解决呢?
pooy
请贴出代码上来我看看,或者发到我的邮箱。
大力水手
java环境中,在3.2下传参除了指定formData外,uploader里的页面后面还要带参数如:
$(function() {
$(“#file_upload”).uploadify({
‘formData’ : {‘someKey’ : ‘1’, ‘someOtherKey’ : 1},
‘swf’ : ‘/uploadify/uploadify.swf’,
‘uploader’ : ‘/uploadify/uploadify.jsp?someKey=1&someOtherKey=2’,
‘onUploadStart’ : function(file) {
$(“#file_upload”).uploadify(“settings”, “someOtherKey”, 2);
}
});
});
这样后台才能取得到someOtherKey的值
pooy
其实不用在URL里面使用GET传递的,直接使用 formData 就可以,你确定你的写法正确吗?
老拐拐
你那somekey的value值的引号是中文的,怎么取
pooy
引号不能为中文的引号,必须是英文的!
大头
哥们,找了很多资料,发现你是用这个插件全网最牛的了,我把身家性命都压到你这里了。就一个问题,因为我需要将上传文件的文件扩展名和文件大小的数据插入到数据库,请问怎么从前端获取者两个数据:’script’: ‘${ctx}/system/FileInfo/uploadFile.do?filesize=fileObj.size’这样从后台取到的filesize值就是“fileObj.size”字符串,而不是我想要的文件大小的值数据
pooy
我不知道java是怎么写的。
但是我知道php是这样写的:
获取文件扩展名,直接在$_FILES 函数里面的键值为type的值就是类型。
获取文件大小,里面也有对应的键值就是size。
好好查下资料吧。
原理都是一样的,文件传到后端之后,去获取你要的值,而不是直接在前端获取。
匿名网友
刚好遇到这个问题,死活都传值不到后台,谢谢分享。
water6000
按照你那个例子,我判断一个表单中的文本框不能为空,但是,运行后,提示文本框不能为空,但是程序还是上传,请问,如何解决?
pooy
贴代码,我看看!
water6000
那个问题,我解决了!但是还有个问题,就是uploadify的这个文件里,如何把传过来的值,插入到数据库中呢?现在前端发过来的所有的值 ,后端都取到了,sql语句也写对了,但是上传成功后,数据库里面却没有值,请问如何解决!多谢!
pooy
直接在你的:
if (move_uploaded_file($tempFile, $path.$fileName)){
//在这里插入SQL insert嘛
echo $fileName.”上传成功!”;
}else{
echo $fileName.”上传失败!”;
}
water6000
我用了php的adodb的插人,但是不知道为什么不能插入呢?
pooy
打印sql,自己手动插入试试呗!
water6000
问题解决了 ,原来是我的数据库路径不对,现在可以任意接受外部传的数据,并入库!多谢你的文章给了我很大的启发!
water6000
还有就是,如何返回到另外一个页面,而不是上传页面呢?
$path = “uploads/”;
if (!empty($_FILES)) {
//得到上传的临时文件流
$tempFile = $_FILES[‘Filedata’][‘tmp_name’];
//允许的文件后缀
$fileTypes = array(‘jpg’,’jpeg’,’gif’,’png’);
//得到文件原名
$fileName = iconv(“UTF-8″,”GB2312”,$_FILES[“Filedata”][“name”]);
$fileParts = pathinfo($_FILES[‘Filedata’][‘name’]);
//接受动态传值
$files=$_POST[‘typeCode’];
//最后保存服务器地址
if(!is_dir($path))
mkdir($path);
if (move_uploaded_file($tempFile, $path.$fileName)){
echo $fileName.”上传成功!”;
}else{
echo $fileName.”上传失败!”;
}
就是长传成功后,如何把页面跳转到另外一个页面,我是这么做的//echo “”; 但是没效果啊!
pooy
在判断全部上传完成之后,直接可以使用JS的location跳转的。
鑫鑫_娘
你好,请问我使用的的是多资源上传,每个资源对应一个描述,该如何传值呢?我发现每次传值过去的都是第一个资源描述。
pooy
全部传好之后,可以通过ajax调用小图来显示,在小图的下面就留一个描述的输入框。给用户填写,然后保存的时候存数据库即可!
f
博主你好,我用formData想获取一个id为aid的select,我这样写:
‘formData’ : {‘aid’:$(‘#aid’).val()}可是后台获取的永远是select的第一个值,似乎没有传递过去,我改成用name的 $(‘select[name=aid] option:selected’).val()也不行,然后我做了一个button触发alert($(‘#aid’).val())发现是取值是正确的,不知道是不是Uploadify的原因?
pooy
直接使用原生态的js:document.getElementById(‘aid’).value!
f
还是不行噢,和JQ的一样
f
在动态设置那里添加就行了!
感觉楼主
太感谢楼主了,帮了我的大忙, 弄了一上午 ,传参不成功, 再次感谢
pooy
没事,客气了!
coder_d
博主你好,我在用这个控件的时候 ,之前好好的,现在出现了一个问题就是,当我上传多文件时,后台永远获取的是最后一个文件。但是文件的数目后台能正确得到,这是什么原因
pooy
检查下后台处理的那个程序吧。
天道酬勤
如果文件是自动上传的,我要用’scriptData’动态传参,那么
<ahref="javascript:$('#uploadify').uploadifySettings('scriptData',{'ttype':document.getElementById
要怎么改啊,看到麻烦回复一下,万分感谢!
pooy
这个想要修改uploadify的js源码。把你要传值的这个触发组件,放到自动上传的函数里面即可。
mickykaby
博主你好,我现在想实现用服务器控件提交上传请问能实现吗,因为页面本身全是用的服务器控件,采用这个作为上传的控件,但又要同时处理,请问有什么办法吗
pooy
朋友,我不太明白。你说的页面本身都是控件,那你就在控件里面捆绑这个上传的模块不就行了吗?
qianqian
你好,我用这个uploadify来进行上传文件,在前台上传之前需要调用自己写的程序检测文件名是否符合要求,怎么来实现呢?谢谢啦
pooy
直接通过js的FILE对象来对文件夹进行匹配就好。
小玲
博主好:
这个插件对于新手的我来讲太深奥了,希望博主不吝赐教,多谢!我现在 的问题是’uploader’ : ‘http://att.wansecheng.com/album-ott/report’,要传递给后台处理的时候,接收不到任何信息,感觉这个链接压根没有触发,report里面就是uploadify.php的内容
pooy
‘upload’,这个选项是插件初始化默认的保存地址。
而你实际要存储的目录是可以在upload.php里面设定的。
eric
楼主,请教个问题,后台处理完上传数据后,有没有方法将后台的相关数据再传回到
onqueueComplete里的跳转参数里?
例如:
‘onQueueComplete’ : function(queueData) {
window.location = siteUrl+”index.php?app=photo&ac=upload&ts=info&photoid={$photoid}&addtime={$addtime}”;
中的$photoid
pooy
可以的 ,在你的后台数据返回到’onQueueComplete’ 这个函数里面的时候。queueData是一个json。在后台对数据进行组装后,前台解析好就行!
jquery_
我遇到一个难题,文件上传没有问题,传入额外参数也没有问题,其中有个参数是select要选择的,点击上传时要判断这个值是否为0,我在onUploadStart里面判断这个值=0会弹出错误提示,但图片还是传上去了。
我需要的是,在点击上传时,如果这个值为0就弹出提示并且不执行上传动作,请问我应该怎么定义?
pooy
你自己的逻辑也很清楚呢!
在点击上传时,如果这个值为0就弹出提示并且不执行上传动作
你考虑一下,你点击上传之后,触发的是什么事件?,然后再这个事件里面用JQ获取Select的值,判断后相对应的处理即可!
kenny
博主,我这里有个奇怪的需求,控件初始化之后怎么修改这个formData的值呢?比如我在一个页面是新增记录,记录中有照片,这时候主记录的ID是0,我新增提交之后,页面不跳转,id改变了,怎么修改这个uploadify中的formData的参数?
whj
如何在form表单中使用uploadify插件呢,需要批量上传,uploadify是一个文件执行以下,那我的form数据如何保存呢