0

サーバーに接続していくつかの結果を返す php スクリプトを要求する ajax 要求があります。

ここに私のPHPコードがあります:

<?php
require_once 'p/DataBase.class.php';
if (!isset($db)) //i added this if statment incase this caused the error
  $db = new DataBase();
$db->query('select * from table where status = 0 order by created_at desc');
$xml = ''; //$xml is just a variable, im not passing the data as xml, i was originally and didnt change the var name
while ($data = $db->fetchObject()) {
  $xml .= $data->title . "<br />";
  $xml .= $data->created_at . "<br />";
}
echo $xml;
?>

そして、ここにJQueryがあります:

$(document).ready(function () {

  function runAjax (data_obj,callback){

    $.ajax({
      url:"ajax.php",
      dataType: "html",
      data: data_obj,
      success: function(html) {              
        if ( typeof(callback) == "function") {
          callback(html);
        }
      }
    });
  }
  jQuery.timerDelayCall({
    interval: 10000,
    repeat: true,
    callback: function(timer) {
      runAjax({
        content: $('#date').html()
      }, function(result){
        $('#updates').html(result);
      });
    }
  });
});

これはローカルで正常に動作し、titanium アプリでの最初の ajax 呼び出しでは機能しますが、titanium アプリでの 2 番目の呼び出しでは致命的なエラーが返されます: C:\path-to-app\dist\win32\app- でクラス データベースを再宣言できません。 name\Resources\p\DataBase.class.php の 10 行目 (10 行目はクラス宣言ですclass DataBase{)

これがなぜなのか、誰もが何らかの考えを持っています

乾杯

ルーク

4

1 に答える 1

1

そう。チタンのバグのようです。私はそれを解決しました。クラス/関数などを宣言するときは、次のことを行う必要があります。1-関数とクラスをいくつかのファイルに移動します2-ファイルのrequire_onceの後に定数を定義します3-定数が定義されていない場合にのみ、ファイルをrequire_onceします

例: ライブラリ lib.php の関数を使用する test.php という AJAX バックエンドがあります。次に、次のように記述する必要があります。 lib.php で:

define('LIBRARY_INCLUDED',1);
function directoryToXml($directory) {/*bla bla bla*/}

私のtest.phpで:

if(!defined('LIBRARY_INCLUDED')) {
    require_once(dirname(__FILE__).'/lib.php');
}

これは、Titanium が Web サーバーとは異なり、PHP ファイルを使用するために発生します。クラスと関数を含むファイルは実行時に存在し、それを2回呼び出すと宣言が繰り返されます...

于 2010-12-13T07:24:12.800 に答える