我有一个名为Clientes的班级。我有一个在AJAX中发出请求的函数。见下文:
Clientes.prototype.listar_clientes = function(){
var url = "funcoes_ajax_clientes.php";
var params = "id_funcao=1";
var xmlhttp = chama_funcao_php_ajax( url, params );
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var resposta_ajax = xmlhttp.responseText;
var elementos_listbox_clientes = manipulacao_strings.separa_dados_string( resposta_ajax );
var html_div_listbox_elementos = "<select name = \"listbox_elementos\" id = \"listbox_elementos\" multiple>";
for( var contador = 0; contador < elementos_listbox_clientes.length; contador+=2 ){
var indice_id = contador;
var indice_nome = contador + 1;
var indice_id_cliente = contador/2;
this.ids_clientes.push( elementos_listbox_clientes[indice_id] );
elemento_listbox_clientes = elementos_listbox_clientes[indice_nome];
html_div_listbox_elementos+= "<option>";
html_div_listbox_elementos+= elemento_listbox_clientes;
html_div_listbox_elementos+= "</option>";
}
html_div_listbox_elementos+= "</select>";
elementos_javascript.set_html_elemento( "div_listbox_elementos", html_div_listbox_elementos );
}
}
xmlhttp.send(params);
}
在
this.ids_clientes.push( elementos_listbox_clientes[indice_id] );
我想引用Clientes类,但是正在引用xmlhttp类。在这种情况下,如何引用Clientes类?
提前致谢。
答案 0 :(得分:1)
在回调函数之外创建一个变量来保存范围。
var url = "funcoes_ajax_clientes.php";
var params = "id_funcao=1";
var xmlhttp = chama_funcao_php_ajax( url, params );
var that = this; //<-- create a variable to hold the scope
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var resposta_ajax = xmlhttp.responseText;
var elementos_listbox_clientes = manipulacao_strings.separa_dados_string( resposta_ajax );
var html_div_listbox_elementos = "<select name = \"listbox_elementos\" id = \"listbox_elementos\" multiple>";
for( var contador = 0; contador < elementos_listbox_clientes.length; contador+=2 ){
var indice_id = contador;
var indice_nome = contador + 1;
var indice_id_cliente = contador/2;
that.ids_clientes.push( elementos_listbox_clientes[indice_id] );
elemento_listbox_clientes = elementos_listbox_clientes[indice_nome];
html_div_listbox_elementos+= "<option>";
html_div_listbox_elementos+= elemento_listbox_clientes;
html_div_listbox_elementos+= "</option>";
}
html_div_listbox_elementos+= "</select>";
elementos_javascript.set_html_elemento( "div_listbox_elementos", html_div_listbox_elementos );
}
}
答案 1 :(得分:0)
为了避免使用本地范围变量,你可以这样做:
var url = "funcoes_ajax_clientes.php";
var params = "id_funcao=1";
var xmlhttp = chama_funcao_php_ajax( url, params);
function changeCallback(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var resposta_ajax = xmlhttp.responseText;
var elementos_listbox_clientes = manipulacao_strings.separa_dados_string( resposta_ajax );
var html_div_listbox_elementos = "<select name = \"listbox_elementos\" id = \"listbox_elementos\" multiple>";
for( var contador = 0; contador < elementos_listbox_clientes.length; contador+=2 ){
var indice_id = contador;
var indice_nome = contador + 1;
var indice_id_cliente = contador/2;
this.ids_clientes.push( elementos_listbox_clientes[indice_id] );
elemento_listbox_clientes = elementos_listbox_clientes[indice_nome];
html_div_listbox_elementos+= "<option>";
html_div_listbox_elementos+= elemento_listbox_clientes;
html_div_listbox_elementos+= "</option>";
}
html_div_listbox_elementos+= "</select>";
elementos_javascript.set_html_elemento( "div_listbox_elementos", html_div_listbox_elementos );
}
}
xmlhttp.onreadystatechange = changeCallback.bind(this);
通常,当您想要调用特定范围内的函数时,请使用bind方法。