0

PHP スクリプトから HTML / Jquery アプリケーションに結果を返そうとすると問題が発生します。

現在、次のようにサーバーに接続しようとしています。

function getDatabaseRows()
{           
    var xmlHttp = new XMLHttpRequest();

    xmlHttp.onreadystatechange = function()
    {
        if(xmlHttp.readyState == 4)
        {
          HandleResponse(xmlHttp.responseText);
        }
    }

    xmlHttp.open("POST", "myDomain.com/subDirectory/getRowCounts.php", true);
    xmlHttp.send(null);
}

私の応答ハンドラは次のとおりです。

function HandleResponse(response)
{   
    alert(response.length);

    if(response.length != 0)
        maxArray = JSON.parse(response);

    storage.set('currentID', maxArray);
}

現在、コードを実行するたびに、getDatabaseRows()常にHandleResponse(response). 問題は、 がresponse.length常に に等しいことです0

PHP スクリプトは、データベースから最大行数を収集し、行数を返すだけです。

<?php

   $rowCounts = [];

   $dbhost = 'host';
   $dbuser = 'host';
   $dbpass = 'host';

   $con = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');
   mysql_select_db("host") or die(mysql_error());

   $sql = "SELECT MAX(TID) AS MaxTID FROM TransData";
   $results = mysql_query($sql, $con);
   $transRow = mysql_fetch_array($results);
   $maxTrans = $transRow['MaxTID'];

   $sql = "SELECT MAX(FID) AS MaxFID FROM FullData";
   $results = mysql_query($sql, $con);
   $fullRow = mysql_fetch_array($results);
   $maxFull = $fullRow['MaxFID'];

   $sql = "SELECT MAX(SID) AS MaxSID FROM SalamanderData";
   $results = mysql_query($sql, $con);
   $salamanderRow = mysql_fetch_array($results);
   $maxSal = $salamanderRow['MaxSID'];

   $sql = "SELECT MAX(OID) AS MaxOID FROM OthersData";
   $results = mysql_query($sql, $con);
   $othersRow = mysql_fetch_array($results);
   $maxOther = $othersRow['MaxOID'];

   array_push($rowCounts, $maxTrans, $maxFull, $maxSal, $maxOther);

   echo json_encode($rowCounts);

   mysql_close($con);
?>

ブラウザでスクリプトを直接指定すると、行が正しくカウントされます。AJAX を介してデータを取得しようとすると問題が発生するだけです。

編集:

わかりました、ようやくスクリプトを接続しました。これは、クロスドメイン スクリプトの問題と関係がありました。すべてが整理されました。

ただし、新しい問題:

function HandleResponse(response)
{   

    if(response.length != 0)
        maxArray = JSON.parse(response);

    storage.set('currentID', maxArray);
}

JSON を解析するときに HandleResponse がエラーをスローするためError trying to parse '<'、配列がエンコードされた方法に関係があると思います。この問題のトラブルシューティングを行い、その配列を解析する方法を見つけるにはどうすればよいですか?

4

2 に答える 2

0

次の接続方法を確認します。

http://api.jquery.com/jQuery.get/

これにより、すべての問題が解決され、コードがクリーンアップされます

これは私の古いコードのサンプルです

    $.ajax({
        data: "id=" + value,
        type: "POST",
        url: "unlock.php",
        success: function (data) {
            if (data == 1 || data == true) {
                var result = true;
            } else {
                var result = false;
            }
        }
    });
于 2012-09-12T20:06:37.773 に答える
0

これは、私が理解できる最も単純な jQuery JavaScript です (これは GET メソッドを使用します)。

function getDatabaseRows()
{           
  $.getJSON('myDomain.com/subDirectory/getRowCounts.php', function(data) {
    console.log(data);
  });
}

http://api.jquery.com/jQuery.getJSON/のドキュメント

foreach {}また、とを使用して PHP を強化します。ただし、より将来性のあるソリューションについては、mysql_result()PHP のクラスを調べることをお勧めします。mysqli

$rowCounts = array();

$dbhost = 'host';
$dbuser = 'host';
$dbpass = 'host';
$dbase  = 'host';

$fields = array(
    'MaxTID' => array('tab' => 'TransData',      'col' => 'TID'),
    'MaxSID' => array('tab' => 'FullData',       'col' => 'SID'),
    'MaxFID' => array('tab' => 'SalamanderData', 'col' => 'FID'),
    'MaxOID' => array('tab' => 'OthersData',     'col' => 'OID')
  );

$con = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');
mysql_select_db($dbase, $con) or die(mysql_error());

foreach ($fields as $id => $info) {
  $sql = "SELECT MAX({$info['col']}) FROM {$info['tab']}";
  $result = mysql_query($sql, $con);
  if (!$result) die('Could not query:' . mysql_error());
  $rowCounts[$id] = mysql_result($result, 0);
}

echo json_encode($rowCounts);

mysql_close($con);

このコードは、GoDaddy がホストするサイトで機能しました。記録として、これは私の最初のスタック オーバーフローの回答です。お知らせ下さい :)

于 2012-09-12T21:22:01.897 に答える