无法让jquery查看从Django视图返回的JSON对象
我有一个表单,允许用户更改数据库中的帐户信息。提交时,表单调用Django视图,并提交到隐藏的iframe。该视图返回一个JSON对象 隐藏的iframe可以看到此对象。在Chrome查看器中,我可以看到希望写入iframe的字段 问题在于jQuery试图访问这些数据。jQuery函数从不运行。控制台日志和警报从未触发。我需要能够使用从django视图返回的数据触发函数 这是我的模板文件中的jQuery块无法让jquery查看从Django视图返回的JSON对象,jquery,django,json,Jquery,Django,Json,我有一个表单,允许用户更改数据库中的帐户信息。提交时,表单调用Django视图,并提交到隐藏的iframe。该视图返回一个JSON对象 隐藏的iframe可以看到此对象。在Chrome查看器中,我可以看到希望写入iframe的字段 问题在于jQuery试图访问这些数据。jQuery函数从不运行。控制台日志和警报从未触发。我需要能够使用从django视图返回的数据触发函数 这是我的模板文件中的jQuery块 <script type="text/javascript" src="http:/
<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>
编辑以发布解决方案:
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"));
}
}
});
我不确定隐藏iframe的意义是什么。您也没有说明实际问题是什么
但是,您的jQuery代码似乎不在
…
标记中,这很可能是问题所在。您的代码有一些问题
$.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"));
}
}
});
首先,javascript代码位于script
标记中,该标记具有src
属性。如果在html文件中包含javascript代码,请使用不带src
属性的单独script
标记。这就是为什么您的代码没有被执行,以及为什么您在控制台中看不到任何东西的原因
如果您解决了这个问题,并且表单中的代码与我想的一样(带有一个提交按钮,没有onclick或任何指定),您首先向服务器发送一个包含正确数据的POST请求,然后,当请求完成并将JSON作为原始文本加载到iframe中时,您向同一url发送另一个JSON请求,这一次是通过GET请求,不包含任何数据,并且以某种方式希望得到与您在iframe中得到的相同的响应
另外,通常最好使用`{%url'视图\ u名称'%}标记,而不是将url硬编码到模板中
您应该做的是使用带有onClick功能的按钮
或提交
输入。如果您使用submit
按钮,则需要执行此操作,并且附加到操作
url的视图应处理默认表单提交。然后,JSON方法应该使用返回JSON数据的不同url/django视图
这个onclick函数应该从表单收集数据,并使用AJAX请求将其发布到服务器。在服务器上更新数据时,HTML标准建议使用POST
请求。为此,需要使用而不是$.getJSON()
您的javascript代码应该类似于以下内容:
<script type="text/javascript">
$('#<submitbutton_id').onclick(function(event) {
data = {
UserId: $('#userid_field_id').val(),
etc.
}
$.ajax("{% url 'update_user_ajax' %}",
{ type: 'POST',
dataType: 'json',
data: data,
success: function(data) {
<parse the data>
}
event.preventDefault()
})
</script>
$('#抱歉。让我编辑一下。隐藏的iframe是因为我有几个表单(每个用户一个表单)我想用更改的内容更新页面。我提交到隐藏的iframe,然后使用jQuery更新更改的行。我试图将问题归结为最基本的问题。我还添加了更多关于我需要帮助解决的问题的解释。谢谢你的回复。我对编程并不陌生,但我对web编程是新手。一位同事也指出了同样的标签问题。这肯定让我在今天的大部分时间里都在旋转我的轮子:/你正确地假设我的表单提交只是普通的HTML提交。我将努力实现你的建议。再次感谢你的建议。我实现了你的建议,并完成了所有工作。我编辑了m我将继续执行您的解决方案。
<script type="text/javascript">
$('#<submitbutton_id').onclick(function(event) {
data = {
UserId: $('#userid_field_id').val(),
etc.
}
$.ajax("{% url 'update_user_ajax' %}",
{ type: 'POST',
dataType: 'json',
data: data,
success: function(data) {
<parse the data>
}
event.preventDefault()
})
</script>