我注意到带有 JSON 响应的不同浏览器之间的一些奇怪行为。我遇到问题的浏览器是 Safari Mobile,特别是 iOS 模拟器。
我正在使用 Codeigniter 并返回部分视图。在所有浏览器(Safari Mobile 除外)中,我的 JSON 响应返回以下内容:
response.Html =
"<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>"
这正是我想要的——我希望有 6 个列表项,我将它注入到页面中。但在 Safari Mobile 中,出于某种原因,我的响应包含 5 个对象的数组 - 这些对象包含一些应用于填充局部视图的数据:
response: Array[5]
0: Object
1: Object
2: Object
3: Object
4: Object
length: 5
对此的 AJAX 调用如下所示:
function getRandomMovies () {
$.mobile.showPageLoadingMsg("a", "Fetching random movies");
$.ajax({
url: "random/get_random_movies",
type: "POST",
dataType: "json",
contentType: "application/json",
cache: false,
success: function (response) {
$('#random-gallery').html(response.html);
initPhotoSwipe();
$.mobile.hidePageLoadingMsg();
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Status: " + textStatus); alert("Error: " + errorThrown);
}
});
}
在 AJAX 调用的控制器方法中,我有以下内容,并且在大多数浏览器中都应该返回 HTML。
public function get_random_movies(){
$movies = $this->random_model->get_random_movies();
$data['results'] = $movies;
$response['html'] = $this->load->view('partials/_random_movie_multiple', $data, true);
echo json_encode($response);
}
您必须原谅我粘贴了所有这些代码块,但我相信它们都是正确调试问题所必需的。对此的任何帮助将不胜感激,因为我花费了大量时间尝试调试此问题,但无济于事。
编辑1:
_random_movie_multiple.php
foreach ($results as $result) {
echo '<li><a data-ajax="false" rel="external" data-href="search/movie/'.url_title($result->title, "-", true).'/'.$result->id.'" data-caption="'.$result->title.' ('.$result->release_year.')" href="'.$result->img284.'"><img src="'.$result->img88.'"/></a></li>';
}