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


HTML and data array both in same ajax response?

我正在进行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。如果这对你有帮助,请告诉我。