如何刷新单独的页面以获取PHP会话变量?

时间:2017-02-02 20:38:58

标签: javascript php html ajax

在开始之前,我需要你知道我的方法不是最好的。我是JavaScript和PHP的初学者,我确信我想要实现的目标可以通过更好,更简单的方式来实现。

我认为我的问题在于会话变量和打印页面。我有一个页面,用户从下拉列表中创建表。我需要在三个不同的页面上以三种不同的格式打印表格。我使用“frames [”iframe] .print“函数链接到打印的三个页面。

以下是我的相框:

<iframe src="customer_detail.php" style="display:none;"name="framed"></iframe>
<iframe src="advisor_copy.php" style="display:none;" name="framez"></iframe>
<iframe src="customer_copy.php" style="display:none;" name="frame"></iframe>

我的按钮:

<span id = "cCopy"><button class = "button" onclick= "frames['frame'].print();"/> Customer Copy</button></span>
<span id = "aCopy"><button class = "button" onclick="frames['framez'].print();" value="Advisor_Copy">Advisor Copy</button>    </span>
<span id = "cCopy"><button class ="button" onclick= "frames['framed'].print();" value="customer_copy">Customer Detail </button></span>

据我所知,需要刷新页面才能更新会话变量。我的黑客解决方案是每1秒刷新我正在打印的3个页面(customer_detail,customer_copy和advisor_copy)。我更喜欢的是当我点击三个按钮中的一个按钮时刷新我正在打印的页面的能力,这样我就可以更新那些页面上调用的会话变量。

我尝试使用onclick事件刷新iframe,但它并没有完全符合我的需要。我一直在寻找各种解决方案,但没有一个真正奏效。如果我需要重构我的代码,那么我会。我认为我真正应该做的是通过AJAX调用将我需要的变量传递给其他页面。我想知道是否有一个解决方案可以让我的代码无需或多或少地从头开始运行。

2 个答案:

答案 0 :(得分:0)

            function refreshPage() {

            $("#widgetbox").fadeOut(750, function() {

            <!-- empty the current content and then fetch new data -->
            $("#widgetbox").empty
            <!-- load the getPage.php file which will replace all the      
            $("#widgetbox").load("getPage.php", function() {
                $("#widgetbox").fadeIn();
            });
            });

            };

            <!-- initiate the function above -->
            $(function(){
            refreshPage();

        <!-- set the interval for refreshing, default set to 1.0 seconds -->
        var int = setInterval("refreshPage()", 1000);

    });

研究这个 http://websitetutorials.net/jquery/rotate-product-listings-php-and-jquery 并修改它

答案 1 :(得分:0)

确定。这是一个丑陋的解决方法,无需重写。

<span id = "cCopy"><button class = "button"><a href="customer_detail.php" target="framed">Customer Copy</a></button>    </span>
<span id = "aCopy"><button class = "button" value="Advisor_Copy"><a href="advisor_copy.php" target="framez">Advisor Copy</a></button>    </span>
<span id = "cCopy"><button class ="button" value="customer_copy"><a href="customer_copy.php" target="frame">Customer Detail</a> </button></span>

<br>
<iframe name="framed"></iframe>
<iframe name="framez"></iframe>
<iframe name="frame"></iframe>

<强> WORKING EXAMPLE

<强>更新

...在单个PHP页面上,在body标签上放置... <body onload="window.print()">

更新2

如果您想删除下划线按钮文字,请添加

style="text-decoration:none;" 
每个<a代码

上的

更新3 (由于浏览器安全锁,需要进行一些测试)

您的index.html:

<span id = "cCopy"><button onclick="printIframe('framed')" class = "button">Customer Copy</button></span>
<span id = "aCopy"><button onclick="printIframe('framez')" class = "button" value="Advisor_Copy">
Advisor Copy</button></span>
<span id = "cCopy"><button onclick="printIframe('frame')" class ="button" value="customer_copy">Customer Detail</button></span>

<br>
<div id='frames'>
</div>

<script>
var iframes = {}; //create a 'container' for iframe
iframes['framed'] = 'customer_detail.php'; // your link
iframes['framez'] = 'advisor_copy.php'; // your link
iframes['frame'] = 'customer_copy.php'; // your link

// if you want to add another iframe create a new line with  iframes['myIframeName'] = 'MyIframeUrlLink'; // your link

for (var k in iframes){
createIframe(k, iframes[k]);
}


function printIframe(id) //this call a javascript print function inside your PHP - need for security reason
{
    var iframe = document.frames ? document.frames[id] : document.getElementById(id);
    var ifWin = iframe.contentWindow || iframe;
    iframe.focus();
    ifWin.printPage();
    return false;
}
//this create iframes
function createIframe(name, src) {
    var i = document.createElement("iframe");
    i.name = name;
    i.id = name;
    i.src = src;
    i.style= "display: none";
    document.getElementById("frames").appendChild(i);
};
</script>

在您的PHP页面中,删除我的onload="window.print()" ,在body标记的末尾,在</body>清除之前,添加:

<script>
    function printPage() { print(); }
</script>
像这样:

</body>
<script>
    function printPage() { print(); }
</script>