Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.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
如何进行初始JavaScript Ajax初始化?_Javascript_Jquery_Ajax_Knockout.js - Fatal编程技术网

如何进行初始JavaScript Ajax初始化?

如何进行初始JavaScript Ajax初始化?,javascript,jquery,ajax,knockout.js,Javascript,Jquery,Ajax,Knockout.js,我正在用ajax获取信息。我希望我的document.ready函数(ajax)首先启动,因为敲除文件首先启动,我的“var initialData”值变为null。我的Ajax是如何开始的 我的剧本: <script type="text/javascript"> var initialData; function functionViewModel() { $(document).ready(function ()

我正在用ajax获取信息。我希望我的document.ready函数(ajax)首先启动,因为敲除文件首先启动,我的“var initialData”值变为null。我的Ajax是如何开始的

我的剧本:

<script type="text/javascript">
        var initialData;
        function functionViewModel() {
                $(document).ready(function () {
                    $.ajax({
                        type: "POST",
                        url: "KnockoutGrid2.aspx/GonderUrunler",
                        data: "{}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (msg) {
                            console.log(msg.d);
                            initialData = msg.d;
                        }
                    });
                });
            var fn = {
                friends: ko.observableArray(initialData)
            };
            fn.removeUser = function (item) {
                fn.friends.remove(item);
            };
            return fn;
        };
        ko.applyBindings(functionViewModel());
    </script>

var初始数据;
函数functionViewModel(){
$(文档).ready(函数(){
$.ajax({
类型:“POST”,
url:“KnockoutGrid2.aspx/GonderUrunler”,
数据:“{}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(msg){
控制台日志(msg.d);
initialData=msg.d;
}
});
});
变量fn={
朋友:ko.observearray(initialData)
};
fn.removeUser=功能(项目){
fn.好友。删除(项目);
};
返回fn;
};
applyBindings(functionViewModel());

在代码中使用
async:false

                   $.ajax({
                        type: "POST",
                        url: "KnockoutGrid2.aspx/GonderUrunler",
                        data: "{}",
                        async : false,
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (msg) {
                            console.log(msg.d);
                            initialData = msg.d;
                        }
                    });
更新2 @user3297291的答案比我的好,因为它是处理表单所有状态的Knockout。请不要在回答ajax请求时执行
applybindings

用户需要知道数据尚未加载,这可以通过knockout处理

原始答案

如果将敲除的初始化移动到
success
函数中:

    <script type="text/javascript">
        $(document).ready(function () {
            $.ajax({
                type: "POST",
                url: "KnockoutGrid2.aspx/GonderUrunler",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    console.log(msg.d);
                    initialData = msg.d;

                    // All initialization inside the 'success' function
                    function functionViewModel(initialData) {
                        var fn = {
                            friends: ko.observableArray(initialData)
                        };
                        fn.removeUser = function (item) {
                            fn.friends.remove(item);
                        };
                        return fn;
                    };

                    ko.applyBindings(functionViewModel(initialData));
                }
            });
        });
    </script>

在这里,我使用的是
self
(请参阅),并且不返回
fn
,因为敲除处理其状态。

不想等待
applyBindings
,直到您的ajax响应得到处理。。。如果您在应用绑定时让淘汰等待,那么您的文档将看起来很难看,而您的用户将看不到任何东西

你应该做什么:

  • 只要
    $(document.ready
    触发,就立即应用绑定
  • 确保您的viewmodels使用
    可观察的
    属性,这些属性允许您稍后轻松地插入数据
  • 确保定义某种加载状态,以向用户显示正在下载的数据
即:

函数functionViewModel(){
var friends=ko.observearray([]);
var负载=可观察的ko(真实);
var removeUser=函数(用户){
删除(用户);
}
//获取数据并在完成后将其写入可观察属性
$.ajax({
类型:“POST”,
url:“KnockoutGrid2.aspx/GonderUrunler”,
数据:“{}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(msg){
friends(JSON.parse(msg.d));
加载(假);
}
});
返回{
朋友:朋友,,
加载:加载,
removeUser:removeUser
};
};
$(文档).ready(函数(){
applyBindings(functionViewModel());

});仍然相同…但给出以下警告:“主线程上的jquery-3.1.1.js:9425[Deprection]Synchronous XMLHttpRequest已被弃用,因为它会对最终用户的体验造成有害影响。有关更多帮助,请选中“so initialdata仍然为空?Yep仍然为空”。你可以在这里看到:为什么不把你的(var-fn=)部分放在success函数中呢?这次(var-fn)没有出现。我认为击倒是在做些什么,但我不知道答案。。。var Fn将变为空白。ı有2个错误。上图:所有数据均为真,但这次给出了此错误。您可以在这里看到:并且认为您忘记了console.log()下的write var initialData。但是现在需要将数组转换为initialData,因为msg.d即将出现字符串,并且需要将其转换为:)更新:我找到了我的答案,并编写了代码“var initialData=JSON.parse(msg.d);”现在一切都好了,再次使用thx:))哦,有一件事,
functionViewModel()
可以移到
$(文档)之外。ready()
函数。即使这是可行的,也不是应该怎么做。只有在加载完所有数据后才应用绑定会破坏可观察/数据绑定属性的主要用途之一。@user3297291谢谢,你说得对,Knockout可以处理所有状态,包括等待Ajax请求显示数据。
    <script type="text/javascript">

        // Updating 'functionViewModel()' to add 'self'.
        // Move functionViewModel()' outside ajax response
        function functionViewModel(initialData) {
            var self = this;

            self.friends = ko.observableArray(initialData);

            self.removeUser = function (item) {
                self.friends.remove(item);
            };
        };

        $(document).ready(function () {
            $.ajax({
                type: "POST",
                url: "KnockoutGrid2.aspx/GonderUrunler",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    console.log(msg.d);
                    initialData = msg.d;

                    // All initialization inside the 'success' function

                    ko.applyBindings(functionViewModel(initialData));
                }
            });
        });
    </script>