【问题标题】:json Ajax request returns every html element of the pagejson Ajax 请求返回页面的每个 html 元素
【发布时间】:2013-01-28 09:22:37
【问题描述】:
<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!
指定数据类型/内容类型会给出解析器错误

【问题讨论】:

  • 请注意,这与jQuery无关。
  • 也与 AJAX 无关.. 一个问题,除了单个 JSON 输出之外,您无法打印任何内容

标签: jquery ajax json perl mason


【解决方案1】:

以防万一有人有相同的pb

忘记添加了

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

inherit =&gt; 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 %>   

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

【讨论】:

    猜你喜欢
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    相关资源
    最近更新 更多