表没有添加到没有警报消息的div

时间:2014-04-25 01:00:17

标签: javascript jquery html asp.net-mvc-3

我无法在显式调用警告框的情况下将表添加到div。

var content = "<table class='table1'>";
$.getJSON("/controller/Method", {
    param1: val1
}, function (data) {
    $.each(data, function (key, value) {

        content += "<tr><td class='class1'>text1</td></tr>";

    });
    content += "</table>";
});

alert(content);

$('#div1').append(content);

如果我删除警告框,表格不会添加到div。

我不明白为什么只会在警报框等页面闪烁上添加表格。

古怪!!

3 个答案:

答案 0 :(得分:0)

在AJAX调用之后,您正在将table附加到div,而不考虑此异步操作的时间,您实际上并没有等待任何结果从服务器返回只是提高了。

另一方面,当你拨打alert功能时,幸运的是只有(!),你正在生效&#34;等待&#34;从服务器到达的结果(可能是毫秒)。

或者,仅将表附加到success回调:

var content = "<table class='table1'>";
$.getJSON("/controller/Method",
        {
            param1: val1
        }
        , function (data) {
            $.each(data, function (key, value) {
                  content += "<tr><td class='class1'>text1</td></tr>";
            });

            $('#div1').append(content);
            $('#div1').append("</table>"); 
        });

答案 1 :(得分:0)

$.getJSON是一个异步调用,因此javascript解释器不会等到它完成后再转到它之后的代码。警报有效地延迟了解释器,允许异步调用及时完成追加。你应该做的是将追加代码放在成功回调中:

var content = "<table class='table1'>";
$.getJSON("/controller/Method",
    {
        param1: val1
    }
    , function (data) {
        $.each(data, function (key, value) {

              content += "<tr><td class='class1'>text1</td></tr>";

        });
        content += "</table>";
        $('#div1').append(content); 
    });

答案 2 :(得分:0)

请注意getJSON发送异步请求,这意味着它不会等待请求的响应。 Yuo应该试试这个:

 $.ajax({
            type: "GET", 
             url: "/controller/Method",
            contentType: "application/json", 
            dataType: "json",
            data: {},
            async:false,
            success: function (data) {
             $.each(data, function (key, value) {

        content += "<tr><td class='class1'>text1</td></tr>";

        });
        content += "</table>";
            },
            error: function (err) {
         alert("Error");
            }
        });

   $('#div1').append(content);

&#34; asyns:false&#34;将通过使ajax请求同步来解决您的问题。