HTML和数据数组都在同一个ajax响应中?

时间:2016-01-01 02:42:21

标签: php jquery ajax

我正在进行ajax调用并且正在回复html响应,我append该数据带有success:参数。

有没有办法同时向data array发送相同的请求,如果响应为appended但是可以在不同的位置/元素中使用,则不会输出?

我寻找答案,我发誓,我没有找到任何有用或可理解的东西。

我会将我的html设置为响应数组的第一个元素,然后将我的数据数组添加为响应第二个元素但是我无法将html推送到数组和{{1它稍后。

更新

append

1 个答案:

答案 0 :(得分:2)

根据您对该问题的评论,@ 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。如果这有助于你,请告诉我。