CakePHP:使用AJAX更新DIV内容

时间:2012-01-11 00:25:30

标签: cakephp cakephp-1.3

我有一个表格,我在settings.ctp文件中加载外部php文件[name#settings_profile.php]。

来自 settings.ctp

的代码段
<table>
   <tr>
      <td rowspan="2" id="upload-response-message">
          <?php include("settings_profile.php"); ?>
      </td>
   </tr>
</table>

settings_profile.php

<?php

$image_path = $user['User']['image_path'];
if (!empty($image_path)) {
    echo $this -> Image -> resize($image_path, 100, 200);
}else{
    echo 'EMPTY' ;
}
?>

settings_profile.php的输出生成如下[从源代码复制]

<table>
  <tr>
      <td rowspan="2" id="upload-response-message"> One
          <img src="/dearmemoir/uploads/resized/image.jpg" alt="thumb" /> 
      </td>
  </tr>
</table>

通过使用AJAX调用Controller来更新$user['User']['image_path']的内容,我正在尝试使用 -

重新加载表中的setting_profile.php文件
function showUploadResponse(data) {
        alert (data.status);
        if( data.status == 1 ) {
        $("#upload-response-message").load("settings_profile.php #upload-response-message");    
        }

    }

但内容从未在页面中更新过。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

通过执行此操作,您正在打破MVC范例和CakePHP约定。如果你在一个不是CakePHP助手的视图中包含一个外部php文件,那么你做错了。

如果只有settings_profile.php,则将其删除并将功能移至控制器或组件。然后将图像分配给传递给视图的变量。

如果您正在使用Ajax然后回拨给服务器,那么您的页面将永远不会被重新加载,以便再次调用视图中包含的代码。相反,将有关已调整大小的图像的信息传递回您的javascript文件,并通过javascript更新表。

//Pseudo Code

//Page is Loaded

//Ajax call made back to the server to resize the image
//Server resizes the image and sends the new image src back to the script
{Image:{name: "newImage", src: "/dearmemoir/uploads/resized/image1.jpg"}}
var returnedData = resultsFromAjax;

//Use javascript to update the image
var imgElement = document.getElementById('ProfileImageId').setAttribute("src", returnedData.Image.src);

那应该更新你的形象!