最近几个关于js的笔记

2010-10-14 23:17

最近几个关于js的笔记

by joe

at 2010-10-14 15:17:11

original http://xiebiji.com/2010/10/note_js/

第一,重温一下数据的json传输手法,最简单的php json转js对象方法:

//php的array('a'=>1,b=>'2')转换输出"{a:1,b:2}"的json字符,以下方法转为js对象
eval('var result = '+returnData+';');//等同于:var result={a:1,b:2}
//然后可以通过以下方法遍历js对象
for(var v in result){
   /*这是递归alert出属性值*/   
   alert(result[v]);
}

第二,研究了一下swfupload(官方下载)这个swf+js的上传组件:

先明确一下原理:

实际上整个原理很简单,单一过程:选择一个文件,然后上传,然后通过响应handle.js里面定义的事件来后续操作。对于多个文件的上传实际上就是重复这个单一过程,handle.js里面定义的每个响应事件都是针对一个文件的上传过程。

再说一下跟php的交互:

a.js端操作,在SWFUload对象初始化时,可以指定给后台php传递的参数,留意注释部分

var settings = {
    flash_url : "swfupload/swfupload.swf",
    flash9_url : "swfupload/swfupload_fp9.swf",
    upload_url: "<?=url('Front','Upload')?>",
    file_post_name : "postFile",//把上传的文件对象传递给php,在php中将以$_FILES['postFile']接收这个对象
    post_params: {"PHPSESSID" : "<?php echo session_id(); ?>"},//可额外给php传递参数,这里用的是post的方式,因此php端可以用$_POST['PHPSESSID']来接收
    file_size_limit : "100 MB",
    file_types : "*.jpg;*.png;*.gif",
    file_types_description : "All Files",
    file_upload_limit : 100,
    file_queue_limit : 0,
    custom_settings : {
        progressTarget : "fsUploadProgress",
        cancelButtonId : "btnCancel",
        uploadButtonId : "btnUpload",
    },
    debug: true,
    auto_upload:false,
 
    // Button settings
    button_image_url: "img/bg_btn_upload.png",
    button_width: "93",
    button_height: "35",
    button_placeholder_id: "spanButtonPlaceHolder",
    button_text: '',
    button_text_style: "",
 
    // The event handler functions are defined in handlers.js
    swfupload_preload_handler : preLoad,
    swfupload_load_failed_handler : loadFailed,
    file_queued_handler : fileQueued,
    file_queue_error_handler : fileQueueError,
    file_dialog_complete_handler : fileDialogComplete,
    upload_start_handler : uploadStart,
    upload_progress_handler : uploadProgress,
    upload_error_handler : uploadError,
    upload_success_handler : uploadSuccess,
    upload_complete_handler : uploadComplete,
    queue_complete_handler : queueComplete   // Queue plugin event
};
 
swfu = new SWFUpload(settings);

b.php端操作,代码:

$file=$_FILE['postFile'];
$return=array();//定义数组
....//文件移动操作、$return赋值
echo json_encode($return);//转为json对象,输出到页面,这样swf可以读取它
与本文相关的日志