1

我有以下代码以 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 都在那里。

我该如何处理?在应用程序端进行任何过滤吗?或者改变提供 JSON 的方式?只是不希望 JS 与 JSON 一起返回。

谢谢!

4

2 回答 2

1

您可以将要注入 DOM 的 JS 作为 JSON 对象中的键添加,然后在代码中手动将其拉出并评估它。您的 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>
于 2013-09-16T21:25:09.733 回答
1

我能找到的唯一方法是在打印我编码的 JSON 之前清理(无论屏幕上打印的 JS 是什么)。

    ob_start();
    ..code..
    ob_end_clean();

print json_encode($data);

这种方式..JS 保留在那里..处理所有内容,为 $data 数组生成结果..然后在屏幕上打印 JSON 之前被清除。

于 2013-09-16T22:26:56.107 回答