2

私は期待どおりに機能する次のスクリプトを持っています、それはXMLリストを取得し、いくつかの変数を割り当てます

$.ajax({
    type: "POST",
    url: "pgGeneral_login/validate.php",
    data: { user:user , pass:pass },
    dataType: "xml",
    success:loginval      });  

function loginval(data){
    console.log("Returned" )

    valid = $(data).find('valid').text();   
    name = $(data).find('name').text();     
    pass = $(data).find('pass').text();


    }; 

私がやりたいのは、各xml結果に変数を割り当てる代わりに(valid = $(data).find('valid')。text())がリストをループし、タグ名に値を割り当てることです。コードの膨大なリストを書かずに、それがphpの場合、私は次のようなものを使用します

    foreach ($row as $k => $v)
            $$k = $v 

助けてください?

4

3 に答える 3

3

これにより、グローバル変数リストが直接更新されるため、お勧めしません。

どうぞ、

function loginval(data){
    console.log("Returned" )

    // valid = $(data).find('valid').text();   
    // name = $(data).find('name').text();     
    // pass = $(data).find('pass').text();

    $(data).children().each(function(){
        // Directly adding to the Global list
        window[this.tagName] = $(this).text();
    });

    console.log(valid);
    console.log(name);
} 
于 2013-02-16T16:14:39.537 に答える
2

ATOzTOA のコードの補足として、これによりグローバル スコープに変数を動的に追加することもできます (つまり、AJAX 機能の外部で使用するため)。ほとんどの JS 開発で一般的に回避されるeval()関数を使用します。

// Array of fields you want to traverse
var array = ['text', 'name', 'pass'];

// This is the data object you get from your AJAX function
var vals = {
    text: 'Hello',
    name: 'John',
    pass: 'Password'
};

// Loop through and assign your vars
for (var i = 0; i < array.length; ++i) {
    var key = array[i];
    eval('var ' + key + ' = "' + vals[key] + '"');
}

console.log(text);

それは興味深い質問だと思ったので、この答えは純粋に代替の(仮の場合の)解決策を提供するためのものです.これを生産目的で使用する場合は注意が必要です.

于 2013-02-16T16:16:58.493 に答える
1

phpで達成できるものではないと思いましたが、あなたが望むことは多少できると思います:

function loginval(data){
    console.log("Returned" )

    $dataList={};

    $(data).children().each(function(){
        $dataList[this.tagName]=$(this).text();
    });

    console.log($dataList )
}
于 2013-02-16T16:04:08.550 に答える