提取完成后立即打印div

时间:2013-08-11 15:02:47

标签: jquery ajax html

问题:我所要做的就是使用他的id从数据库中获取用户的信息,然后在pdf文件或硬拷贝上打印这些传入的信息。

尝试解决方案:我已经在代码中创建了一个方法PrintData(id),它接受​​用户ID作为参数,然后使用ajax从数据库中获取与之相关的所有信息。然后将所有信息放入div中。我使用打印方法来打印该div。不幸的是,PrintElem()方法打印了div的先前内容(不是我们从服务器获取的与该id相关的当前内容)。我能够通过添加另一个带div的打印按钮来实现,但是我想在PrintData()方法将这些信息设置到该div时立即打印这些信息。这是我试图实现它的示例代码。如果您有任何更多信息,请随时问我。

function PrintData(id){
    var Data= "task=showuserdetail&id="+id;
    $.ajax({
        url:"taskprocess.php" ,
        data:Data,
        cache:false,
        dataType:'json',
        type:'POST',
        success: function(output){
            if(output[0] !=0){
                $('#viewDetail').show();     //main Div name
                $('#userID_Retrieve').html(id);
                $('#name').html(output[0]);
                $('#userName').html(output[1])
                $('#accountType').html(output[2]);
                $('#accountGroup').html(output[4]);
                $('#creationDate').html(output[6]);
                $('#streetAddress').html(output[7]);
                $('#state').html(output[8]);
                $('#city').html(output[9]);
                $('#birthDate').html(output[10]);
                $('#phoneNumber').html(output[11]);
            }
        },
        error:function (a, b , c){
            alert(a+" "+" "+c);
        }
    });
    PrintElem('#userDetail');
    return false;
}

其他方法

function PrintElem(elem)
{
    Popup($(elem).html());
}

function Popup(data) 
{
    var mywindow = window.open('', 'my div', 'height=400,width=600');
    mywindow.document.write('<html><head><title>Your details</title>');        
    mywindow.document.write('</head><body >');
    mywindow.document.write(data);
    mywindow.document.write('</body></html>');
    mywindow.print();
    mywindow.close();
    return true;
}

1 个答案:

答案 0 :(得分:0)

我的问题可能是错的,因为你的问题不是100%明确的......但是,我认为问题在于你对$ .ajax异步调用的误解。

我相信您正在寻找以下事项

  1. 提出网络请求
  2. 收到回复时更新div
  3. 使用新的div内容
  4. 调用PrintElem

    在您当前的代码中,当您无法保证第2步已完成时,您执行第3步。这意味着您在更新之前实际上正在调用PrintElem。

    长话短说 - 请确保您对PrintElem的调用是在$ .ajax成功,以便在更新div后仅调用PrintElem

    $.ajax({
        url:"taskprocess.php" ,
        data:Data,
        cache:false,
        dataType:'json',
        type:'POST',
        success: function(output){
            if(output[0] !=0){
                $('#viewDetail').show();     //main Div name
                $('#userID_Retrieve').html(id);
                $('#name').html(output[0]);
                $('#userName').html(output[1])
                $('#accountType').html(output[2]);
                $('#accountGroup').html(output[4]);
                $('#creationDate').html(output[6]);
                $('#streetAddress').html(output[7]);
                $('#state').html(output[8]);
                $('#city').html(output[9]);
                $('#birthDate').html(output[10]);
                $('#phoneNumber').html(output[11]);
    
                // now we can call this
                PrintElem('#userDetail');
    
            }
        },
        error:function (a, b , c){
            alert(a+" "+" "+c);
        }
    });