0

phpとjavascriptを混在させることができないことがわかったので、AJAXを試してみました。以下のコードでは、ajax関数がgetcount.phpページから値を取得し、それを呼び出し元の関数に返すようにします。以下のコードは機能しません。間違いはどこにありますか?

<script type="text/javascript">
function getcount(day)
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

xmlhttp.open("GET","getcount.php?"+day,true);
xmlhttp.send();

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    return xmlhttp.responseText;   
    }
}
 </script>

<script type="text/javascript">
$(function () {
var previousPoint;

var d1 = [];
 for (var i = 0; i <= 10; i += 1)
         d1.push([i, getcount(i)]);
  .
  .
  .
4

4 に答える 4

3

ajax コールバックは非同期になるため、getcount() は undefined を返し、コールバックが返されたときに何にも割り当てられていません。

function getcount(day, arr) {
var xmlhttp;
...
xmlhttp.send();

xmlhttp.onreadystatechange=function() {
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    arr.push([day, xmlhttp.responseText]);   
    }
}
$(function () {
var previousPoint;

var d1 = [];
 for (var i = 0; i <= 10; i += 1)
     getcount(i, d1);
...
于 2012-04-20T18:42:39.033 に答える
1

任意のタイプのAjaxクエリをこの性質のループと混合することは、良い考えではありません。すでに述べたように、Ajaxリクエストは非同期であるため、いくつかの興味深い競合状態が発生します。

単一のajaxリクエストを実行し、phpでループを処理してから、単一の配列を返す方がよいでしょう。ただし、繰り返しになりますが、デフォルトで理解する必要がある重要なことです。残りの手続き型JavaScriptコードは、Ajaxメソッドが返されるのを待ちません。

ヘルプについてはドキュメントを参照してください

于 2012-04-20T19:07:10.270 に答える
1

jQuery を使用すると、はるかに簡単になります。

<script type="text/javascript">
  $(function () {
  var previousPoint, d1 = [];

  var getCount = function(day){
    $.get("getcount.php?"+day, function(data){
      d1.push([day, data]);
    });
  }

  for (var i = 0; i <= 10; i += 1)
    getcount(i)
});
</script>
于 2012-04-20T18:45:07.670 に答える
0
Try using Jquery ajax which is very easier for maintenance and debugging. Here is a sample 
ajax code

$.ajax({
 type: 'POST',  // can be get also
 url: 'yourpage.php',  // change name
 data: id,  // some data if u need to pass
 success: function(data) {  // returns date
       $('.result').html(data); // result 
 }
}); 

For details  http://api.jquery.com/jQuery.ajax/

Thanks.
于 2012-04-20T18:51:03.660 に答える