mootools将表单变成json格式 【转】
来源:互联网 发布:淘宝新品打标时间 编辑:程序博客网 时间:2024/06/07 19:53
JSON 是个好东西,但我却因为一个小问题困扰了好久!
假设通过 Ajax 调用从服务器获得这样一个 JSON 字符串:
- {"username":"dualface","email":"ddddd@ddddd.com"}
知道怎么在 JavaScript 里面转换为对象吗?
正确的做法是:
- obj = eval("(" + json_string + ")");
这么重要的问题,在 JSON.org 上居然没放在首页,而是放在 http://www.json.org/js.html。
解决了小毛病,一会儿又遇到个大问题:
- <form>
- <input type="text" name="roles[]" value=“1” />
- <input type="text" name="roles[]" value=“2” />
- <input type="text" name="roles[]" value=“3” />
- <input type="text" name="roles[]" value=“4” />
- </form>
这种表单如果直接提交给 PHP,那么 $_POST[’roles’] 将会是一个数组,包含有 1/2/3/4 这些值。
这个特性是很方便的,但将表单转换为 JSON 来提交时,就比较麻烦了。
我用的 js 库是 mootools,它提供的 form.toQueryString() 不能处理这种情况,Json.toString() 也不行。
在网上搜索一番后,发现 jquery、prototype 都不支持(可能是我没看到)。
只好自己写了一个:
- function formToJSON(form)
- {
- json = '{';
- isarray = false;
- for (i = 0, max = form.elements.length; i < max; i++) {
- e = form.elements[i];
- name = e.name;
- if (name.substring(name.length - 2) == '[]') {
- name = name.substring(0, name.length - 2);
- lastarr = name;
- if (isarray == false) {
- json += '"' + name + '":[';
- }
- isarray = true;
- } else {
- if (isarray) {
- json = json.substring(0, json.length - 1) + '],';
- }
- isarray = false;
- }
- switch (e.type) {
- case 'checkbox':
- case 'radio':
- if (!e.checked) { break; }
- case 'hidden':
- case 'password':
- case 'text':
- if (!isarray) {
- json += '"' + name + '":';
- }
- json += '"' + e.value.replace(new RegExp('(["////])', 'g'), '//$1') + '",';
- break;
- case 'button':
- case 'file':
- case 'image':
- case 'reset':
- case 'submit':
- default:
- }
- };
- return json.substring(0, json.length - 1) + '}';
- }
使用很简单:
- json_string = formToJSON(document.forms["myform"]);
- // 用 mootools 的 ajax 提交
- new Ajax('test.php', {
- postBody: 'json=' + encodeURIComponent(json_string),
- onComplete: afterDataFormSubmit
- }).request();
test.php 收到后:
- <?php
- $json = $_POST['json'];
- // 使用 PHP 5.2 的 json_decode() 解析
- $arr = json_decode($json, true);
- print_r($arr);
- // 使用 PEAR::Services_JSON 解析
- $services = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
- $arr = $services->decode($json);
- print_r($arr);
这里解析都是强制解析为 php 的数组。一是这样方便使用,二是嵌套的数据可以解析出来。
- mootools将表单变成json格式 【转】
- 将表单序列化之后变成的json格式的数据无法通过Ajax发送到后台的解决
- 将下拉表单变成超链接
- JQUEY 格式化表单数据转JSON格式
- mootools使用ajax返回json格式的代码
- j2ee编程实现将数据变成json格式的高效转换工具fastJson
- 将数据库转php json数组格式
- js中将返回值变成json格式
- HTML5 JSON格式提交表单
- 巧用FlashPaper将文档变成Flash格式
- 将数组对象变成json字符串
- AJAX的serializeArray()方法将表单元素以JSON字符串格式出入后台
- 如何把一个表单form变成Json对象
- JSON编码格式提交表单数据
- JSON编码格式提交表单数据详解
- JSON编码格式提交表单数据详解
- JSON编码格式提交表单数据详解
- JSON编码格式提交表单数据详解
- 工作感触-1
- 人类无法抗拒的10种心理,学会它,就能控制其它人
- btrfs系统
- Fedora 有用更新源
- 用rational rose 2003 设计商业销售系统
- mootools将表单变成json格式 【转】
- (转)程序员眼中的UML (1)
- 中了autorun木马
- CString类成员函数详解
- 关于CPU使用率应用的误区和错误(译文)
- ext中FormPanel的文件域操作
- VC++动态链接库(DLL)编程详文
- (转)程序员眼中的UML (2)
- Mootools源码分析(四) ---- Array 【转】