Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >让jquery查看从Django视图返回的JSON对象时遇到麻烦

让jquery查看从Django视图返回的JSON对象时遇到麻烦
EN

Stack Overflow用户
提问于 2013-07-29 10:30:46
回答 2查看 470关注 0票数 0

我有一个表单,允许用户更改数据库中的帐户信息。在submit上,表单调用Django视图,并提交给隐藏的iframe。视图返回一个JSON对象。

隐藏的iframe可以看到这个物体。在Chrome浏览器中,我可以看到我希望写到iframe的字段。

当jQuery试图访问这些数据时,麻烦就来了。jQuery函数从未运行过。从未触发控制台日志和警报。我需要能够用django视图返回的数据触发函数。

这是我的模板文件中的jQuery块。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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和模板中的表单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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'>

最后,下面是我从视图函数返回的字典:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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表单,并使用下面的代码从视图进行了发送和接收。

添加我的解决方案,以防其他人遇到同样的问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
          $.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"));
                    }
                }
            });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-29 15:19:20

您的代码有一些问题。

首先,在具有script属性的src标记中包含javascript代码。如果在html文件中包含javascript代码,请使用单独的没有src属性的src标记。这就是为什么您的代码没有被执行,以及您在控制台中看不到任何东西的原因。

如果您修复了这个问题,并且您的表单中的代码与我想的一样(使用提交按钮而没有onclick或任何指定的内容),那么首先向服务器发送一个POST请求,其中包含正确的数据,然后,当请求完成后,JSON作为原始文本加载到您的iframe中,您将向同一个url发送另一个JSON请求,这一次是通过一个GET请求,而不包含任何数据,并且在某种程度上期望得到与您在iframe中得到的响应相同的响应。

此外,通常使用‘{% url 'view_name’%}标签比在模板中硬编码url要好。

您应该做的是有一个buttonsubmit输入并附加一个onClick函数。如果使用submit按钮,则需要防止默认操作,并且附加到action url的视图应该处理默认表单提交。然后,JSON方法应该使用一个返回JSON数据的不同的url/django视图。

这个onclick函数应该收集表单中的数据,并使用AJAX请求将其发送到服务器。在更新服务器上的数据时,HTML标准建议使用POST请求。要做到这一点,您需要使用$.ajax()而不是$.getJSON()

您的javascript代码应该看起来有点像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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>
票数 0
EN

Stack Overflow用户

发布于 2013-07-29 10:46:31

我不知道隐藏的iframe有什么意义。您也没有说明实际问题是什么。

但是,您的jQuery代码似乎不在<script>...</script>标记中,这很可能是问题所在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17931552

复制
相关文章
[剑指offer] 斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39
尾尾部落
2018/09/04
6480
斐波那契数列
如果使用递归求解,会重复计算一些子问题。例如,计算 f(4) 需要计算 f(3) 和 f(2),计算 f(3) 需要计算 f(2) 和 f(1),可以看到 f(2) 被重复计算了。
MickyInvQ
2022/05/06
4240
斐波那契数列
斐波那契数列
我们都知道斐波那契数(也叫兔子数)是一组十分有趣的数字,首相为1,第二项也是1,之后的每一项就是前两项之和,那么该如何实现输入第n项就打印其对应的斐波那契数字呢?
用户9996207
2023/01/13
4990
斐波那契数列
斐波那契数列的第n+2项同时也代表了集合{1,2,...,n}中所有不包含相邻正整数的子集个数。
饶文津
2020/05/31
7020
斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…… 如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式::F(n)=F(n-1)+F(n-2) 显然这是一个线性递推数列。 代码实现
呆呆
2021/10/06
3920
斐波那契数列
斐波那契数列【别名黄金分割数列、兔子数列】 斐波那契数列的特点:第1,2两个数为1,1。从第三个数开始,该数是其前两个数之和。
司六米希
2022/11/15
5330
斐波那契数列
斐波那契数列
斐波那契数列的核心就是F(N) = F(N-1) + F(N-2),一般看到的都会采用递归,但是如果使用循环来实现且进行对比,容易发现不少对真是性能的影响
忧愁的chafry
2022/10/30
4600
斐波那契数列
斐波那契数列和斐波那契数
        斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
会洗碗的CV工程师
2022/11/29
7560
斐波那契数列和斐波那契数
[每日一题]斐波那契数列
问题 1131: 【C语言训练】斐波纳契数列 题目描述 斐波纳契数列 1,1,2,3,5,8,13,21,34,55,89……这个数列则称为“斐波纳契数列”,其中每个数字都是“斐波纳契数”。 输入 一个整数N(N不能大于40) 输出 由N个“斐波纳契数”组成的“斐波纳契数列”。 样例输入 6 样例输出 1 1 2 3 5 8 提示 这类题目可能会涉及一些数学知识、逻辑锻炼、模拟问题等等,需要大家对C语言语法能熟练运用之后用来训练提高。 也可以自行查找知识,不明白可以在讨论版中讨论学习。
编程范 源代码公司
2018/04/16
8370
斐波那契数列
递归求解方法 class Solution { public: int fib(int n) { if (n == 0) return 0; if (n == 1) return 1; return fib(n - 1)+fib(n - 2); } };
大忽悠爱学习
2022/05/05
4480
斐波那契数列
斐波那契数列
问题斐波那契数列。(斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。前两项相加等于第三项)
算法与编程之美
2022/02/17
6160
斐波那契数列
斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
木子星兮
2020/07/17
7060
斐波那契数列
#include <iostream> using namespace std; int n,a,b,p; int f(int x){ if(x <= 2){ return 1; } return (a*f(x-1)+b*f(x-2))%p; } int main() { cin>>n>>a>>b>>p; cout<<f(n)<<endl; return 0; }
且陶陶
2023/04/12
3360
斐波那契数列
斐波那契数列
斐波那契数列,1,1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89, 144,. 如果设F(n)为该数列的第n 项( n ∈N* ),那么数列有如下形式,F(n)=F(n-1)+F(n 2)。
砖业洋__
2023/05/06
2330
斐波那契数列
刷抖音突然刷到了斐波那契数列,突发奇想就用java写一个斐波那契数列。虽然很早之前学习算法,这应该是最基本的,但是对于一个干着普普通通工作的我已经是需要深思熟虑一番。
cultureSun
2023/09/02
2560
斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. public class Fibonacci { public static int[] record = null; public int Fibonaci(int n){ if(n<=1){ return n; } if(null == record){ record = new int[n+1];
用户3003813
2018/09/06
3910
[算法] - 斐波那契数列
牛客网 NC65-斐波那契数列 两种实现 迭代 public class Solution { public int Fibonacci(int n) { if(n == 0 || n == 1){ return n; } int a = 0; int b = 1; int fib = 0; for(int i = 2; i <= n; i++){
夹胡碰
2021/06/17
8050
斐波那契数列的N种算法
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)。
用砖头敲代码
2022/08/30
2960
Python|斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
算法与编程之美
2020/04/20
8110
Python|斐波那契数列
打印 斐波那契数列
方法一;递归(可以达到逐个输出的目的) public class FibonacciTest { public long fibonacci(long number){ if (number==0||number==1){ return number; }else{ // 该方法里调该方法 return fibonacci(number-1)+fibonacci(number-2);
传说之下的花儿
2023/04/16
1610

相似问题

如何将output子文件夹设置为在生成时将引用dll复制到

15

如何将生成的图形复制到子文件夹?

20

如何将nupkg从生成过程复制到删除文件夹

11

如何使生成将内容从引用库复制到IIS express文件夹?

24

如何将文件复制到时间戳自动生成的文件夹?

27
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文