Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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将HTML放入一个div中';它是用相同的代码创建的_Javascript_Php_Jquery_Html_Ajax - Fatal编程技术网

Javascript AJAX将HTML放入一个div中';它是用相同的代码创建的

Javascript AJAX将HTML放入一个div中';它是用相同的代码创建的,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,我的代码有问题,已经搜索了几个小时什么可以修复,但没有运气。我自己尝试过很多事情,也没有运气。所以我的问题是: 我有一个JS函数,可以创建一个新的“窗口”,包括所有的DIV,所以所有的东西都是动态创建的。我的函数中有一个AJAX请求,它从一个PHP文件中获取数据,并且应该将该数据放入该函数创建的相应DIV中。但我得到了一个错误: Uncaught TypeError: Cannot set property 'innerHTML' of undefined 我的代码: var proWindo

我的代码有问题,已经搜索了几个小时什么可以修复,但没有运气。我自己尝试过很多事情,也没有运气。所以我的问题是:

我有一个JS函数,可以创建一个新的“窗口”,包括所有的DIV,所以所有的东西都是动态创建的。我的函数中有一个AJAX请求,它从一个PHP文件中获取数据,并且应该将该数据放入该函数创建的相应DIV中。但我得到了一个错误:

Uncaught TypeError: Cannot set property 'innerHTML' of undefined
我的代码:

var proWindow = function(HEIGHT,WIDTH,TITLE,TYPE,ID){
this.max = false;
this.name = TITLE;
this.mMain = document.createElement("div");
this.mMain.className = "main";
this.appID = ID;
this.id = this.name + ID;
$.ajax({
    url: 'includes/getAppContents.php',
    type: 'GET',
    data: {thisAppID: this.appID},
})
.done(function(result) {
    var result = $.parseJSON(result);
    var code = (result['code']);
     this.mMain.innerHTML = code;
})
.fail(function() {
    //console.log("FAILED RETRIEVING CODE FOR APPLICATION");
})
.always(function() {
    //console.log("INITIALIZING APPLICATION");
});
代码的“this”部分完全丢失在AJAX括号中,这导致了问题的出现,AJAX不知道我说的“this.mMain”是什么意思,但我该如何修复它呢

谢谢,
-特里斯坦

问题是你失去了背景。一旦您输入
done
回调
后,此
不再指向定义元素的外部
this

您可以通过告诉jQuery在外部上下文中通过
bind()
(或jQuery的
.proxy()
)调用回调来纠正这个问题:


问题是你正在失去背景。一旦您输入
done
回调
后,此
不再指向定义元素的外部
this

您可以通过告诉jQuery在外部上下文中通过
bind()
(或jQuery的
.proxy()
)调用回调来纠正这个问题:


首先,注意javascript中的“this”键。它不像其他对象编程语言(java、PHP等)那样工作。考虑如果您的代码在全局范围内,即浏览器中的窗口,则此引用将指向浏览器窗口,而不是在代码中创建的新窗口对象


另一方面,当进行ajax调用时,回调函数在其他范围内执行,即jQuery中的jqXHR对象(延迟对象),因此它与您定义或传递回调函数作为ajax调用的函数参数的范围不同。一般来说,您应该考虑“this”,因为它是对在运行时执行函数或代码的对象的引用,并且在堆栈上下文中执行的对象不必与解析时(其他OOP语言中的编译时)的上下文一致

首先,注意javascript中的“this”键。它不像其他对象编程语言(java、PHP等)那样工作。考虑如果您的代码在全局范围内,即浏览器中的窗口,则此引用将指向浏览器窗口,而不是在代码中创建的新窗口对象


另一方面,当进行ajax调用时,回调函数在其他范围内执行,即jQuery中的jqXHR对象(延迟对象),因此它与您定义或传递回调函数作为ajax调用的函数参数的范围不同。一般来说,您应该考虑“this”,因为它是对在运行时执行函数或代码的对象的引用,并且在堆栈上下文中执行的对象不必与解析时(其他OOP语言中的编译时)的上下文一致

console.log(这个)
将向您显示它是Ajax调用
console.log(此)
将向您展示Ajax调用。谢谢,成功了!没有意识到这有那么容易;)总是厌倦JS中的上下文。一般来说,异步回调默认情况下会更改上下文,尽管您有权覆盖上下文,如图所示。如果你认为答案能解决你的问题,请接受。谢谢你,这很有效!没有意识到这有那么容易;)总是厌倦JS中的上下文。一般来说,异步回调默认情况下会更改上下文,尽管您有权覆盖上下文,如图所示。如果你认为答案能解决你的问题,请接受。
.done(function(result) {
    var result = $.parseJSON(result);
    var code = (result['code']);
     this.mMain.innerHTML = code;
}.bind(this))