0

今後のプロジェクトで jQuery の追加機能が必要になるため、現在の JavaScript フレームワークを jQuery に変換しようとしています。いたるところにある特定の関数が 1 つあります (そして、それがセットアップされた方法でセットアップされました ......) jQuery と同等のものでオーバーライドしたいだけです。これは、php ページへの ajax 呼び出しを行う元の Javascript 関数です。

function ajax(n,f,v){
    var ajaxRequest;
    if(window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
        ajaxRequest=new XMLHttpRequest();
    }
    else{// code for IE6, IE5
        ajaxRequest=new ActiveXObject("Microsoft.XMLHTTP");
    }
    ajaxRequest.onreadystatechange=function(){
        if(ajaxRequest.readyState==4 && ajaxRequest.status==200){

            //This is where the result is stored
            result = ajaxRequest.responseText;
            //parseScript pulls out the content and the div and populates the div with the retrieved content.
            parsed_result = parseScript(result);
            document.getElementById(parsed_result.div).innerHTML = parsed_result.source;
        }
    }
    ajaxRequest.open("GET","view.php?n="+n+"&f="+f+"&v="+v+"&time="+(new Date).getTime(),true);
    ajaxRequest.send();
}

function parseScript(_source) {
    var source = _source;
    var scripts = new Array();

    while(source.indexOf("<script") > -1 || source.indexOf("</script") > -1) {
        var s = source.indexOf("<script");
        var s_e = source.indexOf(">", s);
        var e = source.indexOf("</script", s);
        var e_e = source.indexOf(">", e);

        scripts.push(source.substring(s_e+1, e));
        source = source.substring(0, s) + source.substring(e_e+1);
    }

    for(var i=0; i<scripts.length; i++) {
        try {
            eval(scripts[i]);
            var div = div;
        }
        catch(ex) {
        }
    }

    return {source: source, div: div};
}

これは、取得したばかりのページの上部にあります (したがって parseScript 関数)。この div 変数は、取得したコンテンツを配置する場所を示します。

<script>
    var div = 'content_1';
</script>
<!-- some retrieved html -->

JavaScript関数の「上に設定」したいjQuery関数では、取得するajaxファイルをまったく編集しない必要があります。jQuery呼び出しでの私の試みについては、以下を参照してください。

function jAjax(n,f,v) {
$.get('view.php', 'n='+n+'&f='+f+'&v='+v, function(result) {
        if(result) {
            if($('#'+result.div).length) {
                $('#'+result.div).html(result);
            } else {
                console.log("Couldn't find the div= "+result.div);
            }
        } else {
            console.log("Couldn't find the names for n="+n+' f='+f+' v='+v);
        }
    });
}

だから私が持っている質問は、jQuery を使用して ajax 呼び出しから変数をキャプチャし、取得した html をそのキャプチャ div に入力できるようにする方法です。

もう1つ、はい、これを行う以外にもたくさんの方法を考えることができますが、ここに来たときにすでに設定されていた現在のフレームワークでは、この方法が最も簡単です。そのため、ajax スクリプトから変数を取得する方法のみを提案してください。どうもありがとう!

4

1 に答える 1

0

jquery ajax メソッドで取得した JavaScript ファイル内の変数の値を取得する組み込みの方法はありません。ただし、$.get コールバック内で parseScript 関数を呼び出すこともできます。

$.get('view.php', 'n='+n+'&f='+f+'&v='+v, function(result) {
        if(result) {
            parsed_result = parseScript(result);

            if($('#' + parsed_result.div).length) {
                $('#' + parsed_result.div).html(parsed_result.source);
            } else {
                console.log("Couldn't find the div= " + parsed_result.div);
            }
        } else {
            console.log("Couldn't find the names for n="+n+' f='+f+' v='+v);
        }
    });

編集:

ページにスクリプト タグがあるため、コンテンツ タイプをテキストに設定して、より長い $.ajax(...) メソッドを使用してこの呼び出しを行う必要がある場合があります。

編集(代替):

$.get コールバックで変数 'div' を参照するだけで済みます。その時点でスクリプトが実行されているからです。

$.get('view.php', 'n='+n+'&f='+f+'&v='+v, function(result) {
        if(result) {               

            if($('#' + div).length) {
                $('#' + div).html(result);
            } else {
                console.log("Couldn't find the div= " + div);
            }
        } else {
            console.log("Couldn't find the names for n="+n+' f='+f+' v='+v);
        }
    });
于 2012-06-04T20:02:10.347 に答える