Javascript jquery ajax done无法访问返回的对象属性

Javascript jquery ajax done无法访问返回的对象属性,javascript,jquery,ajax,Javascript,Jquery,Ajax,解决了 解决方案: 将其绑定到回调 this.loadVideo(this.reloadVideo.bind(this)); 我正在解决jquery非常奇怪的行为 我有一个对象,其中是返回ajax响应的方法。问题是,我无法访问返回的对象属性 当我尝试访问返回的对象数据时: console.log(this.actualVideoData.htmlContent); TypeError: undefined is not an object (evaluating 'this.actualVid

解决了

解决方案: 将其绑定到回调

this.loadVideo(this.reloadVideo.bind(this));
我正在解决jquery非常奇怪的行为

我有一个对象,其中是返回ajax响应的方法。问题是,我无法访问返回的对象属性

当我尝试访问返回的对象数据时:

console.log(this.actualVideoData.htmlContent);
TypeError: undefined is not an object (evaluating 'this.actualVideoData.htmlContent')
你知道我为什么不能访问这个.actualVideoData.htmlContent吗?谢谢你的回复

jQuery方法对象,该对象正在处理以下内容:

var VideoControls = function () {

    this.loadVideoUrl = window.loadVideoUrl;
    this.mainVideoWrapp = $('#main-video-wrapp');
    this.actualVideoData;
    this.actualVideoId;

    if (!(this instanceof VideoControls)) {
        return new VideoControls();
    }

};
VideoControls.prototype = {
        reloadVideo: function(data){
            console.log(this);
            console.log(this.actualVideoData.htmlContent);
            //this.mainVideoWrapp.html(this.actualVideoData.htmlContent);
        },
        changeVideo: function (videoId) {
            this.actualVideoId = videoId;
            this.loadVideo(this.reloadVideo());
        }, loadVideo: function (callback) {
            var self = this;
            if (typeof this.loadVideoUrl !== 'undefined') {

                var postData = {
                    video_id: this.actualVideoId,
                    _token: getCsrfToken()
                };

                $.ajax({
                    type: 'POST',
                    url: this.loadVideoUrl,
                    data: postData
                }).done(function (data) {
                    self.actualVideoData = data.video;
                    if (typeof callback === 'function') {
                        callback()
                    }

                });
            }
        }
    };
这是我调用console.logdata时得到的结果

Object
video: Object
htmlContent: "<article id="video">↵    <div class="r-iframe-wrapp">↵        <iframe width="900" height="506" src="https://www.youtube.com/embed/cHUT25erCas" frameborder="0" allowfullscreen></iframe>↵    </div>↵    <header>↵        <a href="#" class="title"><h1>Ben Cristovao &amp; Cavalier - Tezky Vahy [Prod. Jan Sokolowski ] Gladiator Treninkova Hymna</h1></a>↵        <div><span class="show-full-description collapse-toggle toggle" data-toggle="collapse" data-target="#video-description">Zobrazit celý popis videa</span></div>↵        <div id="video-description" class="video-desc collapse opened">↵            <div class="video-sub-header clearfix">↵                <div class="left">↵                    Publikoval: <strong>Ben Cristovao</strong> 19. 10. 2014 v 19:01↵                </div>↵                <div class="right video-visits-counter">↵                                    </div>↵            </div>↵            <div class="desc-text">↵                Barbaři: https://www.facebook.com/thebarbarianlife↵Cavalier: https://www.facebook.com/cavaliercz↵Negr: https://www.facebook.com/cristovao.ben↵Producent: https://www.facebook.com/sokolowski.jan↵↵            </div>↵        </div>↵    </header>↵</article>"
videoId: "1"
__proto__: Object
__proto__: Object
它们是:

这是奇怪的行为。另外-在调用回调之前,我尝试在$.ajax.done中执行console.logdata,但它没有登录到控制台中。所以我认为,函数reloadVideo是在self.actualVideoData=data.video完成之前调用的

另一件奇怪的事:当我调用console.logthis时

方法,它返回窗口对象


另外,当我这样做时:console.logdata.video.htmlContent in.done它工作正常。所以,问题可能是在重新加载视频方法中访问这个。但是我不知道为什么。

尝试在$内包装$.ajax,如果喜欢->$.when$.ajax{type:'POST',url:this.loadVideoUrl,data:postData}.donefunctiondata…现在它不会返回错误类型错误:undefined不是一个计算“this.actualVideoData.htmlContent”的对象,但它返回的值是未定义的。在重新加载视频中,您将在数据中得到什么:functiondata{也可以尝试this.htmlContent或$this.actualVideoData.htmlContentUse data.htmlContent,因为console.logdata显示它作为对象包含的内容。.编辑我的第一个问题。问题是,in-reloadVideo方法位于存储的窗口对象中。
[Log] {"video":{"htmlContent":"<article id=\"video\">\n    <div class=\"r-iframe-wrapp\">\n        <iframe width=\"900\" height=\"506\" src=\"https://www.youtube.com/embed/cHUT25erCas\" frameborder=\"0\" allowfullscreen></iframe>\n    </div>\n    <header>\n        <a href=\"#\" class=\"title\"><h1>Ben Cristovao &amp; Cavalier - Tezky Vahy [Prod. Jan Sokolowski ] Gladiator Treninkova Hymna</h1></a>\n        <div><span class=\"show-full-description collapse-toggle toggle\" data-toggle=\"collapse\" data-target=\"#video-description\">Zobrazit celý popis videa</span></div>\n        <div id=\"video-description\" class=\"video-desc collapse opened\">\n            <div class=\"video-sub-header clearfix\">\n                <div class=\"left\">\n                    Publikoval: <strong>Ben Cristovao</strong> 19. 10. 2014 v 19:01\n                </div>\n                <div class=\"right video-visits-counter\">\n                                    </div>\n            </div>\n            <div class=\"desc-text\">\n                Barbaři: https://www.facebook.com/thebarbarianlife\nCavalier: https://www.facebook.com/cavaliercz\nNegr: https://www.facebook.com/cristovao.ben\nProducent: https://www.facebook.com/sokolowski.jan\n\n            </div>\n        </div>\n    </header>\n</article>","videoId":"1"}}
console.log(this);
console.log(this.htmlContent);
console.log($(this).actualVideoData.htmlContent);
Object
actualVideoId: "1"
loadVideoUrl: "http://favideo.inovestudio.com/ajax/video/load"
mainVideoWrapp: Object[1]
__proto__: Object

undefined

TypeError: undefined is not an object (evaluating '$(this).actualVideoData.htmlContent')
reloadVideo