我有一个表单,允许用户更改数据库中的帐户信息。提交时,表单调用 Django 视图,并提交到隐藏的 iframe。该视图返回一个 JSON 对象。
隐藏的 iframe 可以看到这个对象。在 Chrome 查看器中,我可以看到希望写入 iframe 的字段。
问题在于 jQuery 试图访问这些数据。jQuery 函数永远不会运行。控制台日志和警报永远不会被触发。我需要能够使用从 django 视图返回的数据来触发该函数。
这是我的模板文件中的 jQuery 块。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js'>
$('#hiframe').ready(function(){
$.getJSON('{{url_root}}/userupdate/update/', function(data) {
var parseddata = $.parseJSON(data);
console.log(parseddata);
alert(parseddata.UserId);
});
});
</script>
这是模板中的 iframe 和表单:
<iframe name='hiddeniframe' id='hiframe' scrolling='no' frameborder='0' style='display:none'></iframe>
<form id="userUpdate" name="userUpdate" action="{{url_root}}/userupdate/update/" method="POST" target='hiddeniframe'>
最后,这是我从视图函数返回的字典:
json_data = {'UserId': user_name,
'FirstName': user_fname,
'LastName': user_lname,
'Status': user_status}
return HttpResponse(json.dumps(json_data), content_type='application/json')
编辑发布解决方案:
knbk 给了我一些很好的建议,我能够使用这些建议来完成这项工作。我删除了 HTML 表单,并使用下面的代码从视图中发送和接收。
添加我的解决方案以防其他人遇到同样的问题。
$.ajax({
url: "{{url_root}}/userupdate/update/",
type: 'POST',
dataType: 'json',
data: data,
success: function(dta){
jsonfromDB = dta[0];
if (jsonfromDB['ErrMsg'].length > 0) {
alert(jsonfromDB['ErrMsg'].join("\n"));
}
// This is true when we have updated the database.
if(jsonfromDB['UpdateStatus']) {
// Grab the User input
fname.val(jsonfromDB['FirstName']);
lname.val(jsonfromDB['LastName']);
stat.val(jsonfromDB['Status']);
// We want the user to know when success has happened.
alert('Your database update was sucessful.');
}
},
error: function(errdata){
jfDB = errdata[0];
if (jfDB['ErrMsg'].length > 0) {
alert(jfDB['ErrMsg'].join("\n"));
}
}
});