Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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 敲除post JSON表单数据post null_Jquery_Ajax_Json_Knockout.js - Fatal编程技术网

Jquery 敲除post JSON表单数据post null

Jquery 敲除post JSON表单数据post null,jquery,ajax,json,knockout.js,Jquery,Ajax,Json,Knockout.js,我在拔头发!!我已经阅读了所有的例子、教程等,其他的例子使这看起来很简单,但我是新手,不能让它工作 我有一个用户配置文件表单,我想从jQueryAjax请求中绑定它的值。本质上,我希望能够从服务器中提取一个概要文件,并将以前保存的任何数据加载到表单值中。我能够从API请求JSON,并使用映射插件将值加载到表单中(我在数据库中预先填充了概要文件) $.getJSON("api/profile/" + "<?php echo $_SESSION['id']; ?>",function(j

我在拔头发!!我已经阅读了所有的例子、教程等,其他的例子使这看起来很简单,但我是新手,不能让它工作

我有一个用户配置文件表单,我想从jQueryAjax请求中绑定它的值。本质上,我希望能够从服务器中提取一个概要文件,并将以前保存的任何数据加载到表单值中。我能够从API请求JSON,并使用映射插件将值加载到表单中(我在数据库中预先填充了概要文件)

$.getJSON("api/profile/" + "<?php echo $_SESSION['id']; ?>",function(json){

    var viewModel = ko.mapping.fromJS(json);     
    ko.applyBindings(viewModel);  

}); 
这是我的保存呼叫:

viewModel.save = function(){

              $.ajax({
                   url:"api/profile/" + "<?php echo $_SESSION['id']; ?>",
                   contentType: 'application/json',
                   data: ko.mapping.toJSON(viewModel),
                   type: "POST",
                   dataType: 'json',
                   success: function(data) {

                        alert("What's UP!");

                        alert(data)

                    },
                    error: function (data) { alert("error" + data); }
                    });
        }  
viewModel.save=function(){
$.ajax({
url:“api/profile/”+“”,
contentType:'应用程序/json',
数据:ko.mapping.toJSON(viewModel),
类型:“POST”,
数据类型:“json”,
成功:功能(数据){
警惕(“怎么了!”);
警报(数据)
},
错误:函数(数据){alert(“error”+data);}
});
}  
我知道这与save中的“data”行以及Knockout如何绑定到值有关,但就我个人而言,我无法理解。任何帮助都将不胜感激

这是最终适用于搜索的代码:

<script type="text/javascript">

        var viewModel;

        function callback(data) {
            if (viewModel) {
                // model was initialized, update it
                ko.mapping.fromJS(data, viewModel); 
            } else {
                // or initialize and bind
                viewModel = ko.mapping.fromJS(data);
                ko.applyBindings(viewModel);
            }
        }

    save = function() {

             $.ajax({
                    url:"api/profile/" + "<?php echo $_SESSION['id']; ?>",
                    contentType: 'application/json',
                    data: ko.mapping.toJSON(viewModel),
                    type: "POST",
                    dataType: 'json',
                    success: function(data) {

                   alert( ko.mapping.toJSON(viewModel));    
                    },
                    error: function (data) { alert("error" + data); }
                    });
        }        


    $.ajax({
                url: "api/profile/" + "<?php echo $_SESSION['id']; ?>",
                contentType: 'application/json',
                type: "GET",
                dataType: 'json',
                success: function(data) {
                 callback(data);         


                }       
        });


  </script>

var模型;
函数回调(数据){
if(视图模型){
//模型已初始化,请更新它
fromJS(数据,视图模型);
}否则{
//或者初始化并绑定
viewModel=ko.mapping.fromJS(数据);
应用绑定(视图模型);
}
}
save=函数(){
$.ajax({
url:“api/profile/”+“”,
contentType:'应用程序/json',
数据:ko.mapping.toJSON(viewModel),
类型:“POST”,
数据类型:“json”,
成功:功能(数据){
警报(ko.mapping.toJSON(viewModel));
},
错误:函数(数据){alert(“error”+data);}
});
}        
$.ajax({
url:“api/profile/”+“”,
contentType:'应用程序/json',
键入:“获取”,
数据类型:“json”,
成功:功能(数据){
回调(数据);
}       
});

当我使用knockout-mapping-plugin时,我总是创建变量(可以是全局变量,也可以是任何应用程序名称空间中的变量)并只初始化模型一次,而所有其他ajax请求都只是更新模型,可能您错过了更新步骤

下面是代码(当然javascript代码是简化的):


它是否帮助您解决了问题?

您是否可以使用Chrome Developer Tools或Fiddler进行检查,以确保这些字段没有实际发送?您可以在那里添加请求主体吗?因为您也在使用jQuery,所以我建议使用
.serialize()
来获取所有表单值。我不知道knockout.js。serialize API可以很好地工作,已经说过您可能还需要更新一些服务器端代码。使用firebug repsonseI更新我实际上更感兴趣的是请求(由javascript生成),而不是帖子(这将是服务器端的问题)。@AdityaParab
serialize()
不适用于淘汰赛。敲除属性是函数,将被忽略。Knockout对于它自己的序列化非常有用,因为它知道如何正确地提取值。当你承认你不知道你所建议的框架时,你真的不应该给出这样的建议。然后再发回服务器,那会是什么样子?data:ko.mapping.toJSON(model)?我假设是的(我从不发回JSON本身),如果您正确初始化了模型并在回调时更新了模型,那么您应该使用ko.mapping.toJSON(model)从模型中获得正确的JSON。我可以做更多的调查,但以后有更多的空闲时间。
<script type="text/javascript">

        var viewModel;

        function callback(data) {
            if (viewModel) {
                // model was initialized, update it
                ko.mapping.fromJS(data, viewModel); 
            } else {
                // or initialize and bind
                viewModel = ko.mapping.fromJS(data);
                ko.applyBindings(viewModel);
            }
        }

    save = function() {

             $.ajax({
                    url:"api/profile/" + "<?php echo $_SESSION['id']; ?>",
                    contentType: 'application/json',
                    data: ko.mapping.toJSON(viewModel),
                    type: "POST",
                    dataType: 'json',
                    success: function(data) {

                   alert( ko.mapping.toJSON(viewModel));    
                    },
                    error: function (data) { alert("error" + data); }
                    });
        }        


    $.ajax({
                url: "api/profile/" + "<?php echo $_SESSION['id']; ?>",
                contentType: 'application/json',
                type: "GET",
                dataType: 'json',
                success: function(data) {
                 callback(data);         


                }       
        });


  </script>
var model; // it is undefined, I just need to have the way to find whether the model was initialized or not
function callback(data) {
    if (model) {
        // model was initialized, update it
        ko.mapping.fromJS(data, model); 
    } else {
        // or initialize and bind
        model = ko.mapping.fromJS(data);
        ko.applyBindings(model);
    }
}

// do ajax request and call callback(data) on success callback