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 回答