我正在进行ajax调用,并收到html
响应,我用success:
参数append
数据。
有没有一种方法也可以用相同的请求发送data array
,如果响应是appended
,则不会输出,但可以在不同的位置/元素中使用?
我发誓,我一直在寻找答案,但并没有发现任何有用或可以理解的东西。
我会将我的html
设置为响应数组的第一个元素,然后将我的数据数组添加为响应第二个元素,但我不可能将该html
推送到数组,稍后再将其推送到append
。
更新:
$i = 0;
//Forming data array
while( $i < 3) {
$data_array .= "{ ";
$data_array .= "'customIcon': new google.maps.MarkerImage('" . $marker_image . "', null, null, null, new google.maps.Size(50, 69)), ";
$data_array .= "'latLng': new google.maps.LatLng(" . $coordinate[0] . ", " . $coordinate[1] . "), ";
$data_array .= "'postId':'" . get_the_ID() . "', ";
$data_array .= "'postType': 'red', ";
$data_array .= "'alreadyLoaded': false, ";
$data_array .= " }," . "'n";
$i++;
}
//Response
$response = array();
array_push ( $response, $results_html, $data_array, $count );
echo json_encode( $response );
//In ajax success:
console.log( [response[1]] );
//It should have 4 items but it's containing only 1 item that is single long string from all 4 object
//I'll get Google Map error: Uncaught TypeError: Cannot read property 'lat' of undefined
根据你对这个问题的评论,@Terminus让你走上了正轨。至于渲染问题,您需要将渲染的HTML存储到一个变量中。您可以使用ob_创建一个临时响应流,然后将其保存到变量中。考虑以下内容:
$myHtml = '';
ob_start();
// Render your HTML here whether its get_template_part() or echo, it will only save to the temporary stream
$myHtml = ob_get_clean();
// Now return your JSON
echo json_encode(array(
'parameter1' => 'paramvalue',
'parameter1' => 'paramvalue',
'responseHtml' => $myHtml,
));
现在你的jQuery看起来像这个
jQuery.ajax({
url: 'yourajaxurlhere',
data: { },
dataType: 'json',
success: function(__respData) {
var __myHtml = __respData.responseHtml;
var __param1 = __respData.parameter1;
var __param2 = __respData.parameter2;
}
});
希望能有所帮助。
根据您的更新进行更新:
尝试这种方法:
$i = 0;
//Forming data array
$dataArray = array();
while( $i > 3) { // side note this condition concerns me based on your ++ iterator
array_push($dataArray, array(
'customIconMarkerImage' => $marker_image,
'lat' => $coordinate[0],
'lng' => $coordinate[1],
'postId' => get_the_ID(),
'postType' => 'red',
'alreadyLoaded' => false
));
$i++;
}
//Response
$response = array();
array_push ( $response, $results_html, $data_array, $count );
echo json_encode( array(
'dataArray' => $dataArray,
'results_html' => $results_html,
'count' => $count
));
然后在您的jQuery 中
$.ajax({
url: '', data: {}, dataType: 'json',
success: function(__resp) {
var __myMarkup = __resp.results_html;
var __myDataArray = __resp.dataArray;
var __myCount = __resp.count;
$.each(__myDataArray, function(__daIndex, __da) {
// Do javascript / googlemaps stuff here.
var __customMarker = new google.maps.MarkerImage(__da.customIconMarkerImage, null, null, null, new google.maps.Size(50, 69));
var __latLng = new google.maps.LatLng(__da.lat, __da.lng);
var __postId = __da.postId;
var __postType = __da.postType;
var __alreadyLoaded = __da.alreadyLoaded;
});
}
});
我的改变有意义吗?基本上,你试图在你的JSON中返回javascript功能,但你做不到。相反,我修改了它,让你的JSON返回你需要的VALUES,以便使用这些信息运行javascript。如果这对你有帮助,请告诉我。