2

我正在尝试将值从 xml 显示到表单。这是唯一的html页面。

例如 config.xml 有<xml><name>abc</name>....</xml> 和 html 表单有<form><input id="name"></form>

为此,我尝试使用 ajax() 或 get() 函数获取 config.xml 的内容,然后解析 xml,然后在 html 表单上显示这些值。

$(function () {
    var content;
    $.ajax('config.xml', {
        dataType: 'text',
        success: function (data) {
            content = data;
            alert(data);
        }
    });
});

var $inputs = $('#report_form :input');

$inputs.each(function (index) {
    var inputid = $(this).attr('id');
    alert(inputid);
    alert(content);
    var xml = content,
        xmlDoc = $.parseXML(xml),
        $xml = $(xmlDoc),
        $title = $xml.find(inputid);
    alert($title.text());
    text = $title.text();
    $('#' + inputid).val(text);
});

我试过

$.get("config.xml", function(data) {
    xml = data;
    alert(xml);//Do stuff with data here
});

代替 $.ajax(); 现在我的疑问是在执行此 $.get()/$.ajax() 时仅在 xml 解析器之后运行。

我如何在 xml 解析之前执行这个 $.get()/$.ajax()。

4

2 回答 2

2

将您的代码放在回调函数中......以便在检索数据时执行它

 $.get("config.xml", function(data) {
    // what ever here will be executed after the data has returned 
    xml = data;
    alert(xml);//Do stuff with data here


    $inputs.each(function (index)
    {
        var inputid=$(this).attr('id');alert(inputid);
        alert(content);
        var xml = content,
        xmlDoc = $.parseXML( xml ),
        $xml = $( xmlDoc ),
        $title = $xml.find(inputid);
        alert($title.text());
        text=$title.text();
        $('#'+inputid).val(text);
    });
});
于 2013-10-08T17:05:12.837 回答
0

Ajax 调用不会直接响应。但是当它这样做时,代码将在它的回调函数内执行(success在你的情况下)。

就像 asetTimeout将运行回调并且暂时不暂停代码一样。

setTimeout(function {alert("hello")}, 500);
alert("I will run before timeout!");

您必须将代码放在success回调中。此之外的其他代码将在 ajax 成功发送和检索数据之前运行。


$.get("config.xml", function(data) {
    $inputs.each(function (index) {
        // The code is now placed inside the callback and will be successfully ran when ajax has completed.
        var inputid = $(this).attr('id');
        var xmlDoc = $.parseXML(data);
        var text = $(xmlDoc).find(inputid).text();
        $('#'+inputid).val(text);
    });
});
于 2013-10-08T17:11:40.483 回答