JSON PHP脚本将Javascript附加到JSON数据

时间:2013-09-16 21:20:22

标签: javascript php json

我有以下代码将数据以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一起返回。

谢谢!

2 个答案:

答案 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之前消失了。