Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法让jquery查看从Django视图返回的JSON对象_Jquery_Django_Json - Fatal编程技术网

无法让jquery查看从Django视图返回的JSON对象

无法让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:/

我有一个表单,允许用户更改数据库中的帐户信息。提交时,表单调用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>
编辑以发布解决方案:

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>