我使用jquery创建一个简单的CRUD应用程序,通过JSON发送到FLASK后端。JSON查询工作正常。
我正在使用的HTML表单为“新”和“编辑”加倍,因此我更改“Actudio”属性和“方法”,以反映其是否正在创建新记录或编辑现有记录。
这是表格。。。
<div id="chardlg" class="easyui-dialog" title="Character" style="width:300px;padding:10px;" closed="true">
<form id="cf" enctype="multipart/form-data" name="cf">
<table>
<tr>
<td>Name:</td>
<td><input name="name" class="easyui-textbox"></td>
</tr>
<tr>
<td>Short Name:</td>
<td><input name="short_name" class="easyui-textbox"></td>
</tr>
<tr>
<td>Description:</td>
<td><input name="description" class="easyui-textbox"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Submit"></td>
</tr>
</table>
</form>
这是我的javascript来操作表单。
<script type="text/javascript">
function newCharacter(){
$('#chardlg').dialog('open').dialog('setTitle','New Character');
$('#cf').attr('action', charactersurl);
$('#cf').attr('method', 'POST');
$('#cf').form('clear');
}
function editCharacter(){
var row = $('#cg').datagrid('getSelected');
if (row){
$('#chardlg').dialog('open').dialog('setTitle','Edit Character');
document.querySelector('#cf').action = basecharurl.concat(row.character_id);
document.querySelector('#cf').setAttribute('method','PUT');
//$('#cf').attr('action', basecharurl.concat(row.character_id));
//$('#cf').attr('method', 'PUT');
$('#cf').form('load', row);
}
}
通过我的浏览器调试器,我可以看到每一行的属性都按预期发生了变化,但是当URL被提交时,我可以在FLASK控制台上看到一个“GET”方法,而不是正确的“PUT”或“POST”。URL的其余部分是正确的,如果我用'PUT'或'POST'测试它,它就会工作。
您还将注意到,我已经注释掉了设置属性的jquery方法,但这只是为了证明我已经尝试了这两种方法。两个方法都设置了正确的属性,但查询仍然使用“GET”方法发送。
编辑:
这里请求的是调用函数的jquery数据网格。。。
$('#cg').datagrid({
singleSelect:'true',
url:charactersurl,
method:'get',
emptyMsg:'No Data available',
toolbar:[{
iconCls: 'icon-add',
handler: function(){newCharacter()}
},'-',{
iconCls: 'icon-edit',
handler: function(){editCharacter()}
},'-',{
iconCls: 'icon-remove',
handler: function(){alert('Remove')}
}],
columns:[[
{field:'name',title:'Name',width:100},
{field:'short_name',title:'Short Name',width:100},
{field:'description',title:'Description',width:120}
]]
});
如果我在HTML ie中设置窗体方法。。。
<form id="cf" enctype="multipart/form-data" method='put' name="cf">
它仍然将其作为“get”请求发送。唯一显式设置“get”的地方是在datagrid中,但是如果我删除datagrid默认为“POST”请求,并从FLASK后端获取400,因此不会填充datagrid。