如何将通过xmlhttp.open收集的变量传递给起源的PHP代码

时间:2019-02-09 20:01:24

标签: javascript php

我正在通过XMLHttpRequest获得屏幕分辨率。 我正在打开带有屏幕分辨率变量的show_content.php文件,该文件是使用GET方法提取的。可行!

 xmlhttp.open("GET","show_content.php"+queryString,true); 

并在随后的div中显示此文件及其变量

<div id="txtResolution"></div>

这部分也很好!

问题: 这个div包含屏幕分辨率变量,我想在它之外的其余代码中使用它,但是我无法传递它们。我该如何将这些变量传递给原始代码。

我使用了GET方法,但是无法将变量传递给show_content.php之外的原始代码 我也尝试过GLOBALS和Sessions,但是没有运气

这里有代码。一切正常,但我无法将变量从“ txtResolution” div传递给其余代码

function showResolution(field_id)
{
var xmlhttp;
if (field_id.length==0)
{ 
 document.getElementById("txtResolution").innerHTML="";
 return;
 }
    if (window.XMLHttpRequest)
 {// code for IE7+, Firefox, Chrome, Opera, Safari
 xmlhttp=new XMLHttpRequest();
 }
else
 {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
 {
 if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myvalue").innerHTML=xmlhttp.responseText;
var myphpvar = document.getElementById('myvalue').innerText;
}
}

var winW = 630, winH = 460;
if (document.body && document.body.offsetWidth) {
 winW = document.body.offsetWidth;
 winH = document.body.offsetHeight;
    }
if (document.compatMode=='CSS1Compat' &&
document.documentElement &&
document.documentElement.offsetWidth ) {
 winW = document.documentElement.offsetWidth;
 winH = document.documentElement.offsetHeight;
}
if (window.innerWidth && window.innerHeight) {
 winW = window.innerWidth;
 winH = window.innerHeight;
}
  var queryString = "?width=" + winW + "&height=" + winH;



 xmlhttp.open("GET","show_content.php"+queryString,true);
xmlhttp.send();
}    

1 个答案:

答案 0 :(得分:0)

我假设show_content.php包含一些HTML标记和一些您想在JavaScript代码中使用的php var。 您可能只是将php var内容放在show_content.php返回的标记内的隐藏div中的某个位置:

show_content.php:

<?
$myvar = $_REQUEST['width'] +  $_REQUEST['height'];
// send myvar to response:
print '<div style="display:none" id="myvalue">'.htmlspecialchars($myvar).'</div>';
?>

然后在...innerHtml = xmlhttp.responseText;之后将以下代码放入您的javascript中(请参阅评论)

function showResolution(field_id)
{
  var xmlhttp;
  if (field_id.length == 0)
  {
    document.getElementById("txtResolution").innerHTML = "";
    return;
  }
  if (window.XMLHttpRequest)
  { // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
  }
  else
  { // code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }

  xmlhttp.onreadystatechange = function ()
  {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
      document.getElementById("txtResolution").innerHTML = xmlhttp.responseText;
      // Extract myvar value from php
      var myphpvar = document.getElementById('myvalue').innerText;
      alert('Var from php:'+myphpvar);
    }
  }

  var winW = 630, winH = 460;
  if (document.body && document.body.offsetWidth)
  {
    winW = document.body.offsetWidth;
    winH = document.body.offsetHeight;
  }

  if (document.compatMode == 'CSS1Compat' &&
      document.documentElement &&
      document.documentElement.offsetWidth)
  {
    winW = document.documentElement.offsetWidth;
    winH = document.documentElement.offsetHeight;
  }

  if (window.innerWidth && window.innerHeight)
  {
    winW = window.innerWidth;
    winH = window.innerHeight;
  }

  var queryString = "?width=" + winW + "&height=" + winH;

  xmlhttp.open("GET", "show_content.php" + queryString, true);
  xmlhttp.send();
}

当然,最好在响应中使用某种JSON和数据,并且不要在AJAX中混合使用html和数据。