发新话题
打印

Xajax和Zend Framework的整合

Xajax和Zend Framework的整合

source:http://community.xajaxproject.org/viewtopic.php?id=3051

H.E. Pennypacker
Newbie
Registered: 2006-11-13
Posts: 6
I am using Zend Framework 0.20 and Xajax 0.5.     I am having issues with a simple hello world example.     I just get the generic "The XML response from the server was invalid.." message so it's not helping at all.     I have a very simple hello world.

Here is my controller code:

Code: PHP
<?php

class HelloWorldController extends Zend_Controller_Action {

  function indexAction()
  {
    $xajax = new xajax();
    $xajax->registerFunction(array("doAlert", $this, "doAlert"));
    $xajax->processRequest();
   
    $view = Zend::registry("view");
    $view->title = "Hello World";
    $view->xajaxJs = $xajax->getJavascript("/js/", "xajax.js");
   
    echo $view->render("HelloWorld.php");
  }
  
  function noRouteAction()
  {
    echo "No Route!";
  }
  
  function doAlert()
  {
    $objResponse = new xajaxResponse();
    $objResponse->alert("Whaaaaaaaa");
    return $objResponse;
  }
}

?>

Here is the HTML file (HelloWorld.php):

Code: PHP
<html>
<head>
<?= $this->xajaxJs; ?>
<title><?= $this->escape($this->title); ?></title>
<link rel="stylesheet" type="text/css" href="/css/jog.css" />
</head>
<body>

<div id="content">
     <h1><?= $this->escape($this->title); ?></h1>
     <input type="button" value="Execute Xajax Alert" onClick="xajax_doAlert();" />
</div>
</body>
</html>

And here is a view source of the rendered html file, all looks good:

Code: PHP
<html>
<head>
     <script type="text/javascript"><!--
var xajaxConfig = {
requestURI: "http://127.0.0.1/HelloWorld",
debug: false,
statusMessages: false,
waitCursor: true,
version: "xajax 0.5 Beta 1",
legacy: false
};
var xajaxLoaded=false;
function xajax_doAlert(){return xajax.call("doAlert", {parameters: arguments});}
function xajax_doUpdateDiv(){return xajax.call("doUpdateDiv", {parameters: arguments});}
     --></script>
     <script type="text/javascript" src="/js/xajax.js"></script>
     <script type="text/javascript"><!--
window.setTimeout(function () { if (!xajaxLoaded) { alert('Error: the xajax Javascript file could not be included. Perhaps the URL is incorrect?\nURL: /js/xajax.js'); } }, 6000);
     --></script>
<title>Hello World</title>
<link rel="stylesheet" type="text/css" href="/css/jog.css" />
</head>
<body>

<div id="content">
     <h1>Hello World</h1>
     <input type="button" value="Execute Xajax Alert" onClick="xajax_doAlert();" />
</div>
</body>
</html>

Finally, a print_r of $_SERVER just in case there is some issue with mod_rewrite and the request URI:

Code: PHP
[REDIRECT_STATUS] => 200
    [HTTP_HOST] => 127.0.0.1
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0
    [HTTP_ACCEPT] => application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
       [HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.7,es-pe;q=0.3
       [HTTP_ACCEPT_ENCODING] => gzip,deflate
       [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
       [HTTP_KEEP_ALIVE] => 300
       [HTTP_CONNECTION] => keep-alive
       [HTTP_CACHE_CONTROL] => max-age=0
       [PATH] => c:\program files\imagemagick-6.3.0-q16;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\QuickTime\QTSystem\
       [SystemRoot] => C:\WINDOWS
       [COMSPEC] => C:\WINDOWS\system32\cmd.exe
       [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
       [WINDIR] => C:\WINDOWS
       [SERVER_SIGNATURE] => <address>Apache/2.0.59 (Win32) PHP/5.1.6 Server at 127.0.0.1 Port 80</address>

       [SERVER_SOFTWARE] => Apache/2.0.59 (Win32) PHP/5.1.6
       [SERVER_NAME] => 127.0.0.1
       [SERVER_ADDR] => 127.0.0.1
       [SERVER_PORT] => 80
       [REMOTE_ADDR] => 127.0.0.1
       [DOCUMENT_ROOT] => C:/wamp/www
       [SERVER_ADMIN] => webmaster@localhost
       [SCRIPT_FILENAME] => C:/wamp/www/index.php
       [REMOTE_PORT] => 4930
       [REDIRECT_URL] => /HelloWorld
       [GATEWAY_INTERFACE] => CGI/1.1
       [SERVER_PROTOCOL] => HTTP/1.1
       [REQUEST_METHOD] => GET
       [QUERY_STRING] =>
       [REQUEST_URI] => /HelloWorld
       [SCRIPT_NAME] => /index.php
       [PHP_SELF] => /index.php
       [REQUEST_TIME] => 1164746605
       [argv] => Array
           (
           )

       [argc] => 0


I'm just running this off a standard php 5.1.6 wamp installation.     I've tried changing the URI on the xajax instantiation but nothing seems to get this working.     Please, someone help!

CrazyLegz
Newbie
Registered: 2007-02-28
Posts: 3
Hi, I had the same problem and found a solution.
嘿,我和你有遇到同样的问题并且照的了解决方法。

I'm using Zend Framework 0.8.0 and xajax 0.2.4
我使用的是Zend Framework 0.8.0   和 xajax 0.2.4


After examening processRequests() method in the xajax class I found out that processRequests is calling the getRequestMode method. This method returned -1 wich means $_POST["xajax"] and $_GET["xajax"] are empty.
If getRequestMode returns -1 it exits before is has done something at all. So this means your Ajax call isn't processed.

In my case this was very logical. In my index.php bootstrap file I had the following two lines.
Zend::register("post", new Zend_Filter_Input($_POST));
Zend::register("get", new Zend_Filter_Input($_GET));

The $_POST and $_GET arrays are set to NULL by Zend_Filter_Input.
So $_POST["xajax"] will never get to processRequests of the xajax class.

You can resolve this by changing the two lines to the following two lines:
Zend::register("post", new Zend_Filter_Input($_POST, false));
Zend::register("get", new Zend_Filter_Input($_GET, false));

In this way the $_POST and $_GET arrays are left intact.


CtC
Administrator
From: Ohio, USA
Registered: 2006-07-14
Posts: 1331
Website
Thanks for the post!     I've added this to the tips and tricks section of the wiki.

// Joe

--------------------------------------------------------------------------------
xajax Developer
Connect to me on LinkedIn:
http://www.linkedin.com/in/calledtoconstruct

TOP

发新话题