1

我有一个小问题。我正在使用以下代码打开 jQuery 对话框:

$('#dialog').html('<img src="img/ajax-loader.gif" width="100" height="100" />');
$('#dialog').dialog({
    autoOpen: true,
    closeOnEscape: true,
    modal: true,
    position: ['center', 'center'],
    title: _title,
    autoResize:true,
    width: 'auto',
    buttons: {
        "Ok": function() {
            $( this ).dialog( "close" );
        }
    }
    }).load(url, function(data) {
        var arr=$.parseJSON(data);
        console.log('Rez' + arr['result']);
        console.log('result_msg' + arr['result_msg']);
        $.each(arr, function (index, value) {
            if ($.type(value) === 'object')
            {
                console.log('rid: '+ value['rid']);
                console.log('rnos: '+ value['rnos']);
            }
        });
        $(this).dialog("option", "position", ['center', 'center'] );
    });

如果我要获取 html,一切都很好。但是,如果我获取 json,那么我如何格式化它并在#dialog div 中显示给用户?

如果我在#dialog 打开后使用 ajax 调用,#dialog 内容不会改变。有没有办法为load事件添加自定义成功回调?

如果我先加载所有内容然后打开对话框,它不会位于屏幕中心。

如果我运行此代码:

$('#dialog').html('<img src="img/ajax-loader.gif" width="100" height="100" />');
$('#dialog').dialog({
    autoOpen: true,
    closeOnEscape: true,
    modal: true,
    position: ['center', 'center'],
    title: _title,
    autoResize:true,
    width: 'auto',
    buttons: {
        "Ok": function() {
            $( this ).dialog( "close" );
        }
    }
    });
    $.ajax({
        dataType : 'json',
        type: "GET",
        url: url,
        success: function(server_response){
            console.log(server_response);
            $('#dialog').html('vv'); // <---- even this doesn't shows
            switch(server_response.result)
            {
                case 'choose':
                    var linki = '';
                    $.each(server_response, function (index, value) {
                        if ($.type(value) === 'object')
                        {
                            linki += '<a href="javascript:;">'+ value['rnos'] +'</a>';
                            //console.log('rid: '+ value['rid']);
                            //console.log('rnos: '+ value['rnos']);
                        }
                    });
                    console.log('Loading HTML: ' + linki);
                    $('#dialog').html(linki);
                break;
                default: $('#dialog').html(server_response.result_msg);
            }
            $('#dialog').dialog("option", "position", ['center', 'center'] );
        }
    });

然后#dialog 内容不会改变。

=== 编辑 ===

这是完成我需要的修改load事件,但我不确定这是否是好方法。

$('#dialog').dialog({...}).load(url, function(data) {
            var arr=$.parseJSON(data);
            $(this).html('<img src="img/ajax-loader.gif" width="100" height="100" />');
            console.log('Rez' + arr['result']);
            console.log('result_msg' + arr['result_msg']);

            switch(arr.result)
            {
                case 'choose':
                    var linki = '';
                    $.each(arr, function (index, value) {
                        if ($.type(value) === 'object')
                        {
                            linki += '<a href="javascript:;">'+ value['rnos'] +'</a><br />';
                            //console.log('rid: '+ value['rid']);
                            //console.log('rnos: '+ value['rnos']);
                        }
                    });
                    console.log('Ielādējam HTML: ' + linki);
                    $(this).html(linki);
                break;
                default: $(this).html(arr.result_msg);
            }



            $(this).dialog("option", "position", ['center', 'center'] );

        })
4

2 回答 2

0

.load()仅当 AJAX 服务器返回 HTML时才应使用。如果它返回其他内容并且您需要先处理数据,则应使用$.get(). 回调函数应该做任何需要做的事情来将数据转换成 HTML,然后做:

$("#dialog").dialog({
    // options 
}).html(result);
于 2013-07-05T08:30:50.427 回答
0

您是否尝试过使用 ajax 功能?

$.ajax({
    type : "POST",
    url : youURL,
    cache : false,
    dataType : 'json',
    data : yourDATA
}).done(function(msg)
{
//ok
}).fail(function()
{
//nok
});

通过将 dataType 指定为 json,您无需在 msg 变量上解析 JSON

于 2013-07-05T09:22:18.417 回答