0

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 クラスを参照するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

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 );
}
}
于 2013-01-11T17:18:46.317 に答える
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 メソッドを使用します。

于 2013-01-11T20:22:46.977 に答える