为什么$ get()函数为时已晚?

时间:2013-10-08 17:01:40

标签: javascript jquery html

尝试将值从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()。

2 个答案:

答案 0 :(得分: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);
    });
});

答案 1 :(得分:0)

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

正如setTimeout将运行回调而不是暂停代码。

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);
    });
});