在javascript函数中使用JSON数据

在javascript函数中使用JSON数据,javascript,Javascript,我正在编写一个web服务,并将JSON数据作为响应返回 我想知道使用返回到Javascript函数(作为参数传递)的数据的最佳方式是什么 我是否: 使用eval() 使用Doug Crawfords jSon解析器将jSon数据解析为Javascript对象 只需将返回的数据用作对象文本 顺便说一句,我还在学习Javascript(2天前刚刚开始阅读权威指南),所以如果我的问题看起来有点幼稚或愚蠢,请耐心听我说。如果您使用jQuery,可以设置它,使其作为JSON对象返回。 首先,在web服务方

我正在编写一个web服务,并将JSON数据作为响应返回

我想知道使用返回到Javascript函数(作为参数传递)的数据的最佳方式是什么

我是否:

  • 使用eval()
  • 使用Doug Crawfords jSon解析器将jSon数据解析为Javascript对象
  • 只需将返回的数据用作对象文本

  • 顺便说一句,我还在学习Javascript(2天前刚刚开始阅读权威指南),所以如果我的问题看起来有点幼稚或愚蠢,请耐心听我说。

    如果您使用jQuery,可以设置它,使其作为JSON对象返回。

    首先,在web服务方面,我想提出几点建议:

  • 如果在查询字符串中传递了
    callback=functionName
    参数,则返回正确序列化的JSON作为回调函数的唯一参数(在本例中为
    functionName
  • 如果没有请求回调,那么只需返回正确序列化的JSON字符串即可(这对于其他语言使用JSON.PHP或Ruby等语言时非常有用)
  • 然后,就使用它而言,如果您与web服务位于同一个域,则可以检索代码并使用解析代码。如果您位于单独的域,则在请求数据时使用
    回调
    参数,并确保设置了处理回调的函数

    简单示例(使用PHP):

    <?php
       $callback = null;
       if( isset($_REQUEST['callback']) ){
         $callback = $_REQUEST['callback'];
       }
    
       $fakeData = array( 'key' => 'value');
       $json     = json_encode( $fakeData );
    
       echo $callback ? "$callback($json)" : $json;
    ?>
    
    function handleCallback( data ){
      alert( data.key );
    }
    
    function get_json(){
       // Dynamically create the script element
       var script = document.createElement('script');
       script.type = "text/javascript";
       script.src  = "http://yourwebservice.com/service/?callback=handleCallback";
       document.getElementsByTagName('head')[0].appendChild( script );
    }
    

    调用
    get_json
    将动态创建请求(由于跨域限制,将其作为脚本元素。在大多数浏览器中,不能使用XMLHttpRequest进行跨域请求),PHP返回的脚本将在脚本返回时正确调用
    handleCallback
    函数。

    假设您的Web服务使用ScriptService属性修饰: 我建议使用json2.js来处理json客户端。当本地实现可用时,它会遵从本地实现。

    (1)。使用eval()

    只有你确定数据是干净的,我才不会相信任何来自外部的消息

    (2).使用Doug Crawfords jSon解析器将jSon数据解析为Javascript对象

    总的来说,这是最好的主意。即使jQuery也使用普通的旧eval()来解析JSON

    (3)。只需将返回的数据用作对象文本即可


    返回时,它只是一个字符串,而不是一个对象,除非通过上述两个函数中的一个传递,或者封装在函数ala中。

    @bdl“即使jQuery也使用普通的旧eval()解析JSON”在jQuery 1中是不正确的。4@Doug>感谢您的澄清。编辑:显然他们没有更改API文档,因为它仍然声称使用eval()。所有主要浏览器的最新版本都支持原生JSON,因此脚本应该在加载json2.js之前检查它。