Xajax problemen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • k0ewl
  • Registratie: December 2003
  • Laatst online: 18-08-2023
Hoi allen!

Al lange tijd loop ik te denken om nu eindelijk eens Xajax te implementeren op mijn website. Dus ik ben aan de gang gegaan met een nieuw frameworkje, maar het lijkt niet te werken.

Als ik xajax zo aanroep:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
require_once ('../../private/cursor/site/classes/xajax_core/xajax.inc.php');

$xajax = new xajax("test.php");
$xajax->registerFunction("alert");
$xajax->processRequest();

function alert()
{
    $xajax_response = new xajaxResponse();
    $xajax_response->alert("YAY");

    return $xajax_response;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="nl">
<head>
  <title>Title</title>
  <script type="text/javascript" src="scripts/xajax_core.js"></script>
  <script>
  <?php $xajax->printJavascript(); ?>
  </script>
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>
<body>
Xajax version: <?php echo $xajax->getVersion() ?><br/>
<button onclick="xajax_alert();">haha</button>
</body>
</html>

Toont het heel mooi de "YAY" als ik op de knop druk, maar als ik het in mijn framework zet, dan werkt er helemaal niets. De hele pagina laad tot op het punt waar ik:
code:
1
$this->xajax = new xajax();

doe.

In de classen ziet het er zo uit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
session_start ();

require_once ('../../private/sitename/site/classes/adodb_lite/adodb-exceptions.inc.php');
require_once ('../../private/sitename/site/classes/adodb_lite/adodb.inc.php');
require_once ('../../private/sitename/site/classes/xajax_core/xajax.inc.php');

require_once ('./Config.php');

function __autoload ($class_name)
{
    $class_path = '../../private/sitename/site/classes/';
    $class_name = ucfirst (strtolower ($class_name));

    if (file_exists ($class_path.$class_name.'.php'))
      require_once ($class_path.$class_name.'.php');
    else
      die ('Could not locate class '.$class_name);
}

$controller = new Controller ();
?>

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php

class Controller
{

    private $config;
    private $logger;
    private $site;
    private $error;
    private $connection;

    public $database;
    public $xajax;

    function __construct ()
    {
        $this->config = new Config ();
        $this->config = $this->config->get_config();

        try
          {
            $this->logger = new Logger ($this, $this->config);

            $this->logger->log_message (4, 'New connection accepted');
            $this->logger->log_message (4, 'Logger succesfully created');
          } 
        catch (Exception $exception)
          {
            $this->error = new Error ($this, $this->config, 'LOGGER_LOAD_FAIL');
          }

        try
          {
            $this->logger->log_message (4, 'Start loading database object');

            $this->database = ADONewConnection('mysql');
            $this->connection = $this->database->Connect($this->config['db_host'], $this->config['db_user'], $this->config['db_pass'], $this->config['db_name']);

            $this->logger->log_message (4, 'Database connection created to: '.$this->config['db_host']);
          }
        catch (Exception $exception)
          {
            $this->logger->log_exception ($exception);
            $this->logger->log_message (2, 'Loading of database connection failed. See above for error messages.');

            $this->error = new Error ($this, $this->config, 'DB_LOAD_FAIL');
          }

        $this->logger->log_message (4, 'Start loading xajax instance');
        $this->$xajax = new xajax();

        try
          {
            $this->logger->log_message (4, 'Start loading site');

            $this->site = new Site($this, $this->config);
            $this->site->load_site();

            $this->database->Disconnect ($this->connection);
          }
        catch (Exception $exception)
          {
            $this->logger->log_exception ($exception);
            $this->logger->log_message (2, 'Loading of the site failed. See above for error messages.');

            $this->error = new Error ($this, $this->config, 'SITE_LOAD_FAIL');
          }

    }

    public function db_isConnected()
    {
        if ($this->connection != null)
          return true;
        else
          return false;
    }

}

?>

Als ik de $this->$xajax = new xajax(); weghaal, werkt het perfect.

[ Voor 0% gewijzigd door een moderator op 11-11-2008 00:48 . Reden: Code highlighting FTW \0/ ]

A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
$this->$xajax = new xajax();
$this->xajax = new xajax();

Denk ik?

Acties:
  • 0 Henk 'm!

  • k0ewl
  • Registratie: December 2003
  • Laatst online: 18-08-2023
OMG, dat ik daar overheen loop te lezen... eens proberen...

En, ja het werkt nu wel opeens :( Loop hier dus al wat uren naar te zoeken :+

[ Voor 41% gewijzigd door k0ewl op 10-11-2008 23:21 ]

A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zo zie je maar dat het helpt om je code in een nieuw project (oid) te plempen en dan even te strippen tot het hoognodige; ik zie hier in je topicstart ook een enorme lap code staan die niet/weinig relevant is. Als je dan even een stap terugneemt en je code even uitkleedt (en dus ook de kale versie hier post) heb je vast al gevonden waar je probleem zit voordat je een topic opent ;)

Misschien is het ook handig om eens Debuggen: Hoe doe ik dat? door te lezen; wie weet staan daar nog handige tips voor je in. Ik heb trouwens even je code tags aangevuld met "=php" zodat je ook profiteert van code-highlighting, ook handig om te weten voor een volgende keer ;)

[ Voor 36% gewijzigd door RobIII op 11-11-2008 00:49 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • k0ewl
  • Registratie: December 2003
  • Laatst online: 18-08-2023
Okay, ik krijg het gewoon niet aan het werk met mijn controller. Op de een of andere manier heeft hij geen response class enz. Het staat nu zo:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
try
  {
    $this->logger->log_message (4, 'Start loading xajax instance');

    $this->xajax = new Xajax();
    $this->xajax->setFlag('debug', true);
  }
catch (Exception $exception)
  {
    $this->logger->log_exception ($exception);
    $this->logger->log_message (2, 'Loading of Xajax instance failed. See above for error messages.');

    $this->error = new Error ($this, $this->config, 'XAJAX_LOAD_FAIL');
  }


en dan in mijn template staat het als volgt:
PHP:
1
<td><button onclick="xajax_get_schools();"><?php echo $this->controller->xajax->getVersion(); ?></button></td>


Ik krijg in mijn debug van Xajax nu:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
xajax debug output
Tue Nov 11 2008 23:08:56 GMT+0100

DONE [183ms]

Tue Nov 11 2008 23:08:56 GMT+0100

ERROR: No response processor is available to process the response from the server.
Content-Type: null

Tue Nov 11 2008 23:08:56 GMT+0100

RECEIVED [status: 0, size: 0 bytes, time: 181ms]:

Tue Nov 11 2008 23:08:56 GMT+0100

SENT [37 bytes]

Tue Nov 11 2008 23:08:56 GMT+0100

SENDING REQUEST

Tue Nov 11 2008 23:08:56 GMT+0100

CALLING: 
xjxfun: get_schools
URI: 
http://www.cursoruitgeverij.nl/test/excercase

Tue Nov 11 2008 23:08:56 GMT+0100

POST: xjxfun=get_schools
&xjxr=1226441336434

Tue Nov 11 2008 23:08:56 GMT+0100

INITIALIZING REQUEST OBJECT

Tue Nov 11 2008 23:08:56 GMT+0100

PREPARING REQUEST

Tue Nov 11 2008 23:08:56 GMT+0100

PROCESSING PARAMETERS [0]

Tue Nov 11 2008 23:08:56 GMT+0100

INITIALIZING REQUEST

Tue Nov 11 2008 23:08:56 GMT+0100

STARTING XAJAX REQUEST


Hoe moet ik mijn functie doorgeven aan Xajax dat het werkt? Ik heb deze implementatie van het Xajax forum, maar het werkt nog steeds niet :(

A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."


Acties:
  • 0 Henk 'm!

  • Kiphaas7
  • Registratie: Februari 2005
  • Laatst online: 26-09 22:20
Dit gaat steeds meer om php code, dus hoort het ondertussen niet thuis in het serverside forum? Overigens is dit nogal een specifiek xajax probleem, zou je dan niet beter op hun forum kunnen vragen? Waarschijnlijk zitten daar meer mensen die een volledig begrip hebben van xajax....

trouwens, misschien een domme opmerking, uit je eerste voorbeeld:
PHP:
1
    $this->xajax = new Xajax();
En je tweede voorbeeld:
PHP:
1
    $xajax = new xajax("test.php");
Wat is het nou, xajax of Xajax?

[ Voor 3% gewijzigd door Kiphaas7 op 12-11-2008 02:03 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik ken xajax niet, maar:
Stuur je uberhaupt een content-type? En klopt de url wel waar je naar POST?

edit
Ik heb eens even zitten kijken, maar een Ajax request geeft doodleuk je HTML pagina terug... begin daar eens mee :? Heb je de link die ik postte over debugging al eens bekeken?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
POST /test/excercase HTTP/1.1
Host: www.cursoruitgeverij.nl
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.7,nl;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.cursoruitgeverij.nl/test/excercase
Cookie: PHPSESSID=xxx
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

HTTP/1.1 200 OK
Date: Wed, 12 Nov 2008 01:13:41 GMT
Server: Apache/2.0.46 (CentOS)
X-Powered-By: PHP/5.2.4
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

198

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="nl">

<head>
...
...


Enneh.. die call klopt :?
JavaScript:
1
xajax_get_schools = function() { return xajax.request( { xjxfun: 'get_schools' }, { parameters: arguments } ); };
Kiphaas7 schreef op woensdag 12 november 2008 @ 02:02:
Dit gaat steeds meer om php code, dus hoort het ondertussen niet thuis in het serverside forum?
Je had gelijk tot een paar minuten geleden :) Het lijkt me nu weer behoorlijk een WEB aangelegenheid.

[ Voor 128% gewijzigd door RobIII op 12-11-2008 02:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 26-09 10:03

MBV

Je hebt 2 problemen: je onclick-code moet false teruggeven om te zorgen dat je geen reload krijgt van je pagina, dat maakt debuggen een stuk lastiger.
Zodra ik dat heb gedaan met Firebug, krijg ik een '500 internal server error' op de goeie request (met post-gegevens: xjxfun=getschools, xjxr=1226483742921). Daar zal je probleem in zitten. Kijk dus eens in je apache error logs.
code:
1
2
3
4
5
6
7
8
9
10
Wed Nov 12 2008 10:58:41 GMT+0100

ERROR: No response processor is available to process the response from the server.
Content-Type: text/html.
Check for error messages from the server.

Wed Nov 12 2008 10:58:41 GMT+0100

ERROR: The server returned the following HTTP status: 500
RECEIVED:


Totdat je de return false hebt neergezet ziet de debugger van xajax kennelijk de page reload als de echte request. Logisch: die xajax-request is asynchroon, en komt niet meer binnen omdat de pagina opnieuw geladen wordt. Request gaat naar de goede pagina toe, client-side is er weinig aan de hand :)

[ Voor 17% gewijzigd door MBV op 12-11-2008 11:01 ]


Acties:
  • 0 Henk 'm!

  • k0ewl
  • Registratie: December 2003
  • Laatst online: 18-08-2023
MBV schreef op woensdag 12 november 2008 @ 10:59:
Je hebt 2 problemen: je onclick-code moet false teruggeven om te zorgen dat je geen reload krijgt van je pagina, dat maakt debuggen een stuk lastiger.
Zodra ik dat heb gedaan met Firebug, krijg ik een '500 internal server error' op de goeie request (met post-gegevens: xjxfun=getschools, xjxr=1226483742921). Daar zal je probleem in zitten. Kijk dus eens in je apache error logs.
code:
1
2
3
4
5
6
7
8
9
10
Wed Nov 12 2008 10:58:41 GMT+0100

ERROR: No response processor is available to process the response from the server.
Content-Type: text/html.
Check for error messages from the server.

Wed Nov 12 2008 10:58:41 GMT+0100

ERROR: The server returned the following HTTP status: 500
RECEIVED:


Totdat je de return false hebt neergezet ziet de debugger van xajax kennelijk de page reload als de echte request. Logisch: die xajax-request is asynchroon, en komt niet meer binnen omdat de pagina opnieuw geladen wordt. Request gaat naar de goede pagina toe, client-side is er weinig aan de hand :)
Klopt, heb nu de return false erbij gezet. Helaas kan ik nergens de apache logs bekijken.

Zo, nog even wat verder geprobeerd met een nieuw bestand met daarin wat classes enz en toen stapje voor stapje geprobeerd het werkend te krijgen. Het is nu allemaal gelukt en het werkt! :D
Zometeen eens even dropdown's enz invullen vanuit mijn class :D

Owja, hier lag het blijkbaar aan:
PHP:
1
$this->controller->xajax->registerFunction(array('get_schools', &$this, 'get_schools'));

A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."

Pagina: 1