CakePHP 1.3 で jQuery AJAX を使用する場合、AJAX 応答には、モデルのデータセットを含む配列だけでなく、完全なレイアウトが含まれます。このページ全体がレンダリングされないようにするにはどうすればよいですか? $this->autoRender = false; を使用しようとしました。$this->layout = 'ajax' としましたが、これでも問題は解決しませんでした。実際には、返されたデータに応答がありませんでした。
私のコントローラーのアクションは次のとおりです。
public function search() {
if (empty($this->data)) {
} else {
// $this->autoRender = false;
// $this->layout = 'ajax';
$request = $this->data;
$this->set('data', $this->Event->search($request['Event']['search']), 'host');
}
}
そして私の見解は次のとおりです。
<!-- app/views/events/search.ctp -->
<h1>Corporate Events</h1>
<form method="post" action="search">
<input type="text" name="search" id="search_box" class='search_box'/>
<input type="submit" value="Search" class="search_button" /><br />
</form>
<p><?php echo $html->link("Add Event", "/events/add"); ?>
<table>
<tr>
<th style='width:100px'>Id</th>
<th style='width:100px'>Title</th>
<th style='width:100px'>Host</th>
<th style='width:100px'>Description</th>
<th style='width:100px'>Action</th>
</tr>
<div id= "results"></div>
<?php foreach ($data as $event): ?>
<tr>
<td><?php echo $event['id']; ?></td>
<td>
<?php echo $html->link($event['event_title'],'/events/view/'.$event['id']);?>
</td>
<td><?php echo $event['host']; ?></td>
<td><?php echo $event['description']; ?></td>
<td>
<?php echo $html->link(
'Delete',
"/events/delete/{$event['id']}",
null,
'Are you sure?'
)?>
<?php echo $html->link('Edit', '/events/edit/'.$event['id']);?>
</td>
</tr>
<?php endforeach; ?>
</table>
<script type="text/javascript">
$(function() {
$(".search_button").click(function() {
var searchString = $("#search_box").val();
var data = {'data[Event][search]':searchString};
if(searchString) {
$.ajax({
type: "POST",
url: "/events/search",
data: data,
beforeSend: function(html) { // this happens before actual call
$("#results").html('');
$("#searchresults").show();
$(".word").html(searchString);
},
success: function(html){ // this happens after we get results
$("#results").show();
$("#results").append(html);
}
});
}
return false;
});
});
</script>
ありがとう!