2009-06-10 37 views
1

我在使用cakePHP和MySQL开发的应用程序中使用jQuery。jQuery Ajax成功消息显示一个大HTML文件

在此jQuery代码

$.ajax({ 
    type: "POST", 
    url: "./updateField", 
    data: "name="+fieldname, 
    success: function(msg){ 
       alert("Data Saved: " + msg); 
      }//success 
});//ajax 

数据库的操作会正常,但如果我使用的警报语句的它让我看到一个很大的HTML文件......不知道为什么它的到来。

回答

4

它显示一个HTML,因为这是你从服务器获得的。我想这是因为你的AJAX调用实际上并不会阻止呈现页面而不是返回XML或Json结构。我不知道CakePHP有哪些选项可用于返回XML或Json而不是呈现页面,但问题的根源绝对在服务器端而非客户端。

1

因为这是从POST响应...

-2

尝试增加更多的参数,以成功的功能 - 第一个参数可能会返回而不是实际的结果,但发送者或某事的一致好评。

+1

的第一个参数是/ POST的结果。结果恰好是来自服务器的长文档。正如DrJokepu所述,建议在服务器端进行更正。 – 2009-06-10 10:14:59

2

我相信默认情况下,Cake不会通过主布局运行Ajax请求,所以大多数HTML不应该在那里。如果没有,您可以通过专门调用控制器的渲染方法并将布局设置为'ajax'来强制使用什么布局。参考:http://book.cakephp.org/view/57/Controller-Methods#render-428

我也有打开调试的问题,因为所有的SQL语句都记录到AJAX请求底部的HTML表中,并导致一些严重的解析问题,当数据类型被期望是AJAX 。这可能是一个黑客,但我做了以下来解决它。

在主AppController中的beforeFilter(),添加以下(请确保您的所有其他控制器的beforeFilter方法调用父类的方法):

if ($this->RequestHandler->isAjax()) { 
     $db =& ConnectionManager::getDataSource('default'); 
     $db->fullDebug = false; 
} 

位于cake/lib /模型/数据源/ dbo_source。 PHP在大致我的版本线2074,我改变

if (Configure::read() > 1) { 
    $this->showLog(); 
} 

if (Configure::read() > 1 && $this->fullDebug) { 
    $this->showLog(); 
}