0
<script language="JavaScript">  
 var result = {};  
 var data;  
 function load_metadata (id) {
$.ajax({
    url: "/video/metadata",
    type: "POST",
    data: id,
    cache: false,
    //dataType: "json",
    //contentType: 'application/json',
    success: function(data) {
        result = data;  
    },
    error: function(e, xhr){ 
        alert('slideshow data load error: ');
    }
});         
 alert(result.toSource());  //({})
}   
</script>    

/video/metadata(梅森组件)

<%class>   
use JSON;   
has 'data';      
</%class>   
<%init>

use Data::Dumper;
print STDERR  Dumper($.data); # $VAR1 = '"815"'

my $item_hash->{'item'} = "test";   # Valid JSON in JSONLint.com

my $json = to_json($item_hash, { ascii => 1 });

print  STDERR  Dumper($json); # $VAR1 = '{"item":"test"}';
</%init>
<% $json %>   

它返回页面的每个 html 元素,而不是来自组件调用的 json!
指定数据类型/内容类型给出解析器错误

4

1 回答 1

0

以防万一有人有相同的铅

忘记添加

<%flags>
extends => undef
</%flags>

inherit => undef标志为了缩短组件继承,
取消注释 dataType 并
添加'async': false,

所以最终的工作代码是:

<script language="JavaScript">  
 var result = {};  

 function load_metadata (id) {
$.ajax({
    url: "/video/metadata",
    type: "POST",
    data: id,
    cache: false,
    dataType: "json",
    'async': false,
    success: function(data) {
        result = data;  
    },
    error: function(e, xhr){ 
        alert('slideshow data load error: ');
    }
});         
 alert(result.toSource());  //({"item":"test"})
}   
</script>    

/video/metadata(梅森组件)

<%flags>   
    extends => undef   
</%flags>   

<%class>   
use JSON;   
has 'data';      
</%class>  

<%init>

use Data::Dumper;
print STDERR  Dumper($.data); # $VAR1 = '"815"'

my $item_hash->{'item'} = "test";   # Valid JSON in JSONLint.com

my $json = to_json($item_hash, { ascii => 1 });

print  STDERR  Dumper($json); # $VAR1 = '{"item":"test"}';
</%init>
<% $json %>   

希望它能为您节省几个小时

于 2013-02-13T16:27:01.410 回答