在change_text()函数中,我试图将xmhttp.responsetext变量传递给它但是我该怎么做呢?我还没有看到如何传递它?
<script type="text/javascript">
function ajax(url, func) {
this.url = url;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 2 && xmlhttp.status == 200) {
this.func = func;
}
}
xmlhttp.open();
xmlhttp.send()
}
function change_text() {
target = document.getElementById("x");
target.innerHTML = xmlhttp.responseText;
}
ajax("url.php", change_text);
</script>
答案 0 :(得分:2)
实际上,为了做到这一点,你根本不想使用this
,因为你没有创建任何对象的实例,并且它不像构造函数那样。
你可以:
function ajax(url, func) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
// note: loaded is 4 ^
func(xmlhttp.responseText);
}
}
xmlhttp.open('GET', url, true);
// ^~~ you also forgot to pass parameters here
xmlhttp.send('');
}
这会使ajax
功能起作用。
对于change_text
功能,它与ajax
功能不同,因此无法访问xmlhttp
变量。但是,ajax
函数将responseText传递给它,所以只需让你的函数接收它:
function change_text(responseText) {
var target = document.getElementById("x");
// ^~~ don't forget to declare local variables with `var`.
target.innerHTML = responseText;
}
有关工作示例,请参阅jsFiddle。
答案 1 :(得分:0)
将this.func = func;
更改为this.func = function () { func(xmlhttp.responseText); };
答案 2 :(得分:0)
<script type="text/javascript">
function ajax(url, func) {
this.url = url;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 2 && xmlhttp.status == 200) {
func(xmlhttp);
}
}
xmlhttp.open();
xmlhttp.send()
}
function change_text(xmlhttp) {
target = document.getElementById("x");
target.innerHTML = xmlhttp.responseText;
}
ajax("url.php", change_text);
</script>
您必须使用参数调用回调。另请注意,this.url = url
只设置window.url = url
,这可能是一个错误。
您可能需要xmlhttp.open("POST", url)
。
答案 3 :(得分:0)
Mike Samuel 几乎是正确的,但change_text
缺少一个参数,试试这个:
<script type="text/javascript">
function ajax(url, func) {
this.url = url;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
//did you mean: func(xmlhttp.responseText);
if(xmlhttp.readyState == 2 && xmlhttp.status == 200) {
this.func = function() {
func(xmlhttp.responseText);
};
}
}
xmlhttp.open();
xmlhttp.send()
}
function change_text(responseText) {
target = document.getElementById("x");
target.innerHTML = responseText;
}
ajax("url.php", change_text);
</script>