| 264 | |
| 265 | // utility fn for deep serialization |
| 266 | function deepSerialize(extraData){ |
| 267 | var serialized = $.param(extraData, options.traditional).split('&'); |
| 268 | var len = serialized.length; |
| 269 | var result = []; |
| 270 | var i, part; |
| 271 | for (i=0; i < len; i++) { |
| 272 | // #252; undo param space replacement |
| 273 | serialized[i] = serialized[i].replace(/\+/g,' '); |
| 274 | part = serialized[i].split('='); |
| 275 | // #278; use array instead of object storage, favoring array serializations |
| 276 | result.push([decodeURIComponent(part[0]), decodeURIComponent(part[1])]); |
| 277 | } |
| 278 | return result; |
| 279 | } |
| 280 | |
| 281 | // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz) |
| 282 | function fileUploadXhr(a) { |