0

わかりました、ajax経由でPHP変数をjavascript変数に取得しようとしています。

私はこの変数を次のように見せるためのphpコードをいくつか持っています:(このトピックに関連するコードのみが機能するため、コード全体を配置しません。ARRAYであるnew_m変数があり、それを渡したいです)

shuffle($new_m); 
echo json_encode($new_m);

次に、そのエコーをキャッチするjsファイルがあり、次のようになります。

function getXMLHttp() 
{
  var xmlHttp

  try
  {
    //Firefox, Opera 8.0+, Safari
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    //Internet Explorer
    try
    {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
      try
      {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch(e)
      {
        alert("Your browser does not support AJAX!")
        return false;
      }
    }
  }
  return xmlHttp;
}

function MakeRequest() 
{
  var xmlHttp = getXMLHttp();

  xmlHttp.onreadystatechange = function()
  {
    if(xmlHttp.readyState == 4)
    {
      var myvar = new Array();
    var myvar=JSON.parse(xmlHttp.responseText);


return myvar;


    }

  }
   xmlHttp.open("GET", "showimage.php", true);
  xmlHttp.send(null);
}

このコードがここのように別のページになく、関数内で myvar が使用されている場合は機能します (別のページでこのコードを正常に使用したため)。だから私の問題は、正しい変数を返さないか、正しい方法で返さないことだと思います。

コードの最後の部分は、この myvar を使用する必要がある部分です。次のようになります。

<script type="text/javascript" src="js/shuffle.js"></script>
<title>undf</title>
</head>
<body onload="MakeRequest()">


<script type="text/javascript">
alert(myvar);
var pos = 0;
var imgs = myvar;
</script>

そして何も起こりません。このajaxとjavascriptはまだ新しいです。事前に助けてくれてありがとう。

4

1 に答える 1

3

あなたの問題は、alert( myvar);実行時にサーバーへのリクエストがまだ発生しておらず、変数が未定義であることです(変数がスコープ外にあると信じているため、アクセスできないことは言うまでもありません)。

ウィンドウが読み込まれたときにリクエストを実行してデータを取得し、それを読み取るように JS を設定する必要があります。

<script type="text/javascript">
window.onload = function() {
    var myvar = MakeRequest();
    alert( myvar);
}
</script>

その後、タグonload内のを取り除くことができます。<body>

関数内ではなく xmlhttp コールバック内にあるMakeRequest()ため、関数から値を正しく返しているかどうかは完全にはわかりません。returnこれを調査して確認する必要があります。

于 2013-01-13T02:16:04.903 に答える