我正在尝试创建 Web 表单,提交后将创建一个 couchdb 文档并将附件添加到文档中。我从教程/其他论坛中看到,有必要通过两个阶段的过程来做到这一点(就像蒲团一样)。我可以获取要上传的文档,但似乎无法获取要上传的附件。我已经尝试了很多方法,目前我正在做类似的事情:
带有以下内容的 html 文件:
<!DOCTYPE HTML>
<html>
<head>
<title>Document submission</title>
<style type="TEXT/CSS" media="all">
</style>
</head>
<body>
<table>
<form id="form" name="form" action="">
<tr>
<td>Field</td>
<td><input type="text" required="required" name="field">
<span id="required">*</span></td>
</tr><tr>
</tr><tr>
<td></td><td><button type="button" id="submit">Select Attachment</button><td>
</tr>
</form>
</table>
</body>
<script src="/_utils/script/json2.js"></script>
<script src="/_utils/script/jquery.js"></script>
<script src="/_utils/script/jquery.couch.js"></script>
<script src="/_utils/script/jquery.form.js"></script>
<script src="/_utils/script/jquery.dialog.js"></script>
<script type="text/javascript" src="basic.js"></script>
</html>
然后是一个名为 basic.js 的文件,其中包含:
function create_document(){
var db_name = 'uploader';
var db = $.couch.db(db_name);
var data={}
data['fname']=document.form.field.value;
db.saveDoc(data, {
success: function (data) {
add_attachment(db,data);
},
error: function () {
alert("Cannot save the thread.");
}
});
}
function add_attachment(db,data){
var docID = data.id;
var dbName = db.name;
var form = $("#upload-form");
$.showDialog("dialogue.html", {
load: function(elem) {
$("input[name='_rev']", elem).val(data._rev);
},
submit: function(data, callback) {
if (!data._attachments || data._attachments.length == 0) {
callback({_attachments: "Please select a file to upload."});
return;
}
var form = $("#upload-form");
form.find("#progress").css("visibility", "visible");
form.ajaxSubmit({
url: db.uri + $.couch.encodeDocId(docID),
success: function(resp) {
form.find("#progress").css("visibility", "hidden");
location.href = "?" + encodeURIComponent(dbName) +
"/" + $.couch.encodeDocId(docID);
}
});
}
});
}
$(document).ready(function() {
$("button#submit").click(function(event) {
create_document();
});
});
这个 javascript 几乎取自 futon.browse.js uploadAttachment 段。dialog.html 文件也只是 couchdb 的 www/dialog/_upload_attachment.html 的直接副本。然后将所有文件(主 html、basic.js 和 dialog.html)上传到 CouchDB 设计文档(在名为 uploader 的数据库中)。
文档创建得很好,但无论我做什么,附件都永远不会保存。我尝试过的各种方法要么导致关于多部分表单的错误,要么在这种情况下根本没有明显的错误。
有谁知道我做错了什么?