我有以下代码将数据以JSON格式返回到移动应用程序..
if($_POST){?>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=AIzaSyDDEBh6r9r7-VxyYqRehzYZp903M69_W7s&sensor=false&libraries=geometry"></script>
<script src="jquery-1.10.2.min.js"></script>
<?php
$eventid = $_POST['eventid'];
$uid = $_POST['uid'];
$email = $_POST['email'];
$twitterusername = $_POST['twitterusername'];
$instausername = $_POST['instausername'];
.....more PHP code..
?>
<script type="text/javascript" code="maps_code1">
var mapCanvas;
var container;
var zoom = 11;
var centerPoint = new google.maps.LatLng(<?php echo $eventimage_latitude;?>, <?php echo $eventimage_longitude;?>);
<?php
$l = 1;
foreach($user as $userData){
?>
var LatLng<?php echo $l;?> = new google.maps.LatLng(<?php echo $userData['latitude'];?>, <?php echo $userData['longitude'];?>);
....
function setMarker(marker, point, html, title, icon) {
if (marker) {
marker.setPosition(point);
return marker;
}
marker = new google.maps.Marker({
position : point,
title : title,
icon : icon,
draggable : true,
map : mapCanvas
});
<?php $j = 1;
foreach($user as $userData){?>
user_marker<?php echo $j;?> = new google.maps.Marker({
position: LatLng<?php echo $j;?>,
title: '<?php echo $userData['checkin_email'];?>',
map: mapCanvas,
draggable: false
});
<?php $j++;
}?>
google.maps.event.addListener(marker, 'click', function() {
infoWnd.setContent(html);
infoWnd.open(map, marker);
});
print json_encode($data);
所以我有一个PHP代码..其中包含JS代码,更多PHP代码将数据存储在$ data数组中......最后我打印了JSON编码数组。
此JSON由移动应用使用。在我添加JavaScript之前,一切正常。它甚至可以立即运行,执行它所需要的功能。但是App无法解析JSON,因为它也会响应所有Javascript。
它与网页的情况基本相同。我们在页面上看不到JS ..它工作得很好,但当你查看源代码/ html时,所有的JS都在那里。
我该如何处理?在app端进行任何过滤?或者改变JSON的服务方式?只是不希望JS与JSON一起返回。
谢谢!
答案 0 :(得分:1)
您可以将要注入的JS作为JSON对象中的键添加到DOM中,然后在代码中手动将其拉出并进行评估。您的AJAX成功函数需要一个有效的JSON对象,该对象以{
开头。通过在响应中添加纯文本,您已使JSON无效。
在回显数据之前,请执行以下操作:
$data['custom_js'] = '<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=AIzaSyDDEBh6r9r7VxyYqRehzYZp903M69_W7s&sensor=false&libraries=geometry"></script><script src="jquery-1.10.2.min.js"></script>';
这会将JS添加到JSON对象中,可以在成功回调中访问它。你可以这样做:
$.ajax({
...
success : function (response) {
if (typeof response.custom_js === "string") {
$("body").append(response.custom_js);
}
...
}
...
});
JSON代表JavaScript Object Notation,这意味着来自服务器的JSON响应基本上需要是一个Javascript对象。您应该能够在JS中获取响应并设置与其相等的变量,而不会产生任何解析错误。类似的东西:
<script>
var someVar = <?php echo json_encode(array("key" => "val")) ?>;
</script>
答案 1 :(得分:1)
我能找到的唯一方法是在打印编码的JSON之前清理(无论屏幕上显示的是什么JS)。
ob_start();
..code..
ob_end_clean();
print json_encode($data);
这种方式..JS仍然在那里......处理了所有内容,为$ data数组生成了结果......而不是在屏幕上打印JSON之前消失了。