我想用jsHelper重写这个jQuery Ajax请求,这个请求在cakePHP视图中的cakePHP视图中与cakePHP不兼容。 到目前为止,我已经设置了所有内容(包括我的控制器中的帮助程序,在我的布局中编写缓冲区,包括我的库(jQuery)),但我不知道如何重写它:
$.ajax
({
url: 'clients/loadJsonMarkers',
accepts: 'json',
type: 'POST',
data: postData,
dataType: 'json',
error: function(xhr,status,err){
alert("DEBUG: status"+status+" \nError:"+err);
},
success: function(transport)
{
var markers = new Array();
for(var i in transport.clients)
{
var latlng = transport.clients[i].Client.geoloc.replace("(", "");
latlng = latlng.replace(")", "");
latlng = latlng.split(',');
//console.debug(latlng);
markers.push(new google.maps.LatLng(parseFloat(latlng[0]),parseFloat(latlng[1])));
}
loadMap(markers);
}
});
到目前为止,我所取得的成就是:
$this->Js->get('document');
$this->Js->event('load',
$this->Js->request(
array('action' => 'loadJsonMarkers'),
array('assync'=>TRUE, 'type'=>'json', 'method'=>'POST', 'data'=>$_POST)
),
array('success'=>$this->Html->scriptBlock("
function(transport)
{
var markers = new Array();
for(var i in transport.clients)
{
var latlng = transport.clients[i].Client.geoloc.replace('(', '');
latlng = latlng.replace('(', '');
latlng = latlng.split(',');
//console.debug(latlng);
markers.push(new google.maps.LatLng(parseFloat(latlng[0]),parseFloat(latlng[1])));
}
loadMap(markers);
}"
))
);
但我觉得缺少某些东西,我不知道是否应该使用这个选择器(文档)。
答案 0 :(得分:0)
由于Cake会缓存所有内容并将其置于$(document).ready()
函数中,因此您需要做的就是将其添加到缓冲区中。
$request = $this->Js->request(
array('action' => 'loadJsonMarkers'),
array(
'async' => true,
'type' => 'json',
'method' => 'POST',
'data' => $_POST,
'wrapCallbacks' => false,
'success' => "function(transport) {
var markers = new Array();
for(var i in transport.clients) {
var latlng = transport.clients[i].Client.geoloc.replace('(', '');
latlng = latlng.replace('(', '');
latlng = latlng.split(',');
markers.push(new google.maps.LatLng(parseFloat(latlng[0]),parseFloat(latlng[1])));
}
loadMap(markers);
}"
)
);
$this->Js->buffer($request);
确保您在布局中编写缓冲区。
但是,既然你已经有了纯粹的JS写作,你应该只是缓冲它,因为JsHelper会likely be removed in CakePHP 3.0。