1.我现在有一个这样的api地址他返回的是json格式的数据
http://api.cndns.com/sitestar/getTemplateCategories.aspx?username=cantect&otime=201302281136&checksum=5d3742d59bb86347d71b7145a6615f612.我想获取他的status的值,但是我不知道从何下手3.这是我用jquery写的获取json的测试页面,通过firebug的调试,证明我get了json数据,但是显示不了
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>test.html</title>

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<script type="text/javascript" language="javascript" src="js/jquery-1.7.2.js"></script>
 
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script>
 function showStudent(){
     var s='';
  $.getJSON("http://api.cndns.com/sitestar/getTemplateCategories.aspx?username=cantect&otime=201302281136&checksum=5d3742d59bb86347d71b7145a6615f61",function(json){
   var d=json.status;  for(var i=0;i<d.length;i++){
    //循环输出p标签 
    s+=('<p>id:'+d[i].status +'&nbsp;&nbsp;');
  }
  $('#content').html(s);
 });
 
}  </script> 
  </head>
  
<body>
<input type="button" value="获取json" onclick="showStudent()" />
<div id="content"></div>
</body>
</html>
json跨域 jqueryfirebughtml

解决方案 »

  1.   


    $(function(){
    $.ajax({
    type:'GET',
    url:'http://api.cndns.com/sitestar/getTemplateCategories.aspx?username=cantect&otime=201302281136&checksum=5d3742d59bb86347d71b7145a6615f61' ,
    dataType:'jsonp',
    success:function(data){
    console.log(data);
    }});
    });
    好像不行,建议LZ用JAVA或PHP去获取,然后用ajax去调用对应的后台程序。
      

  2.   

    跨域请求的话, 需要 Server 端做改动, 只靠前台操作是完成不了的
      

  3.   

    <script type="text/javascript" src="javascript/jquery-1.4.2.min.js"></script>
    <script> 
    $(document).ready(function() 
            {
     
            //从校务系统取得学校新闻
            var shoolwebsite = "http://10.1.8.199:801/school/InterFaceWebService.asmx/GetSchoolNotice2_jsonSerialization?callback=?";
            $.getJSON(
                        shoolwebsite,
                        {uid:'mkxling', CountTop:10},//用户id,取得最新新闻条数
                        function(data)
                        {     
                                var i=0;
                              var jsons ;
                              jsons=jQuery.parseJSON(data.msg);
                               var i=0;
                                if (jsons)
                                {
                                    if (jsons.length > 0 )
                                        {
                                         for (i = 0; i <= jsons.length-1; i++) {
                                            alert(jsons[i].NoticeId);
                                            alert('创建时间:' +jsons[i].CreateTime);
                                            alert('新闻标题:'+Url.decode(jsons[i].Title));
                                            alert('新闻超链接:'+jsons[i].URL);
                                            alert('作者:'+Url.decode(jsons[i].NOTICEAUTHOR));
                                            alert('新闻内容:'+Url.decode(Url.decode(jsons[i].NOTICE)).replace(/\+/g," "));
     
                                            //asp不懂 建议用【创建时间】,【新闻标题】作为主键更新NEWS这张表。                                        
                                                          
                                        }
                                    
                                    }
                                }
         
                    });
     
                })
                 
    var Url = {
     
    // public method for url encoding
    encode : function (string) {
    return escape(this._utf8_encode(string));
    },
     
    // public method for url decoding
    decode : function (string) {
    return this._utf8_decode(unescape(string));
    },
     
    // private method for UTF-8 encoding
    _utf8_encode : function (string) {
    string = string.replace(/\r\n/g,"\n");   
    var utftext = "";
     
    for (var n = 0; n < string.length; n++) {
     
    var c = string.charCodeAt(n);
     
    if (c < 128) {
    utftext += String.fromCharCode(c);
    }
    else if((c > 127) && (c < 2048)) {
    utftext += String.fromCharCode((c >> 6) | 192);
    utftext += String.fromCharCode((c & 63) | 128);
    }
    else {
    utftext += String.fromCharCode((c >> 12) | 224);
    utftext += String.fromCharCode(((c >> 6) & 63) | 128);
    utftext += String.fromCharCode((c & 63) | 128);
    }
     
    }
     
    return utftext;
    },
     
    // private method for UTF-8 decoding
    _utf8_decode : function (utftext) {
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;
     
    while ( i < utftext.length ) {
     
    c = utftext.charCodeAt(i);
     
    if (c < 128) {
    string += String.fromCharCode(c);
    i++;
    }
    else if((c > 191) && (c < 224)) {
    c2 = utftext.charCodeAt(i+1);
    string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
    i += 2;
    }
    else {
    c2 = utftext.charCodeAt(i+1);
    c3 = utftext.charCodeAt(i+2);
    string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
    i += 3;
    }
     
    }
     
    return string;
    }
     
    }
      

  4.   

    后台要允许JS访问,同时输出json格式,当出错返回一个状态参数时候,必须把该参数处理成json格式输出。
    现在在家了,有空贴吧
    $.getJSON(
                        website,//webservice调用
                        {USERID:myuserid,PWD:mypwd,SUBJECTDETAILGUID:mysubjectdetailguid,TOPCOUNT:TOPCOUNT}, //参数调用
                        function(data)
                        {     
                             if (jQuery.parseJSON(data.msg)[0].RESULT=="-1") //取得失败
                             {
                                $('#'+mycontainerid).html(''); return; 
                             }
                             
                              var i=0;
                              var jsons ;
                              var CREATETIME;
                              var NOTICENAME;
                              jsons=jQuery.parseJSON(data.msg);
                               var i=0;
                                   if (mysubjectdetailguid=='a3e6d110-cfde-40a7-b1d5-32fb2027c7c7')
                                    {
                                     mysubjectdetailguid=mysubjectdetailguid;
                                    }
                                if (jsons)
                                {$.getJSON(
                        website,//webservice调用
                        {USERID:myuserid,PWD:mypwd,SUBJECTDETAILGUID:mysubjectdetailguid,TOPCOUNT:TOPCOUNT}, //参数调用
                        function(data)
                        {     
                             if (jQuery.parseJSON(data.msg)[0].RESULT=="-1") //取得失败
                             {
                                $('#'+mycontainerid).html(''); return; 
                             }
                             
                              var i=0;
                              var jsons ;
                              var CREATETIME;
                              var NOTICENAME;
                              jsons=jQuery.parseJSON(data.msg);
                               var i=0;
                                   if (mysubjectdetailguid=='a3e6d110-cfde-40a7-b1d5-32fb2027c7c7')
                                    {
                                     mysubjectdetailguid=mysubjectdetailguid;
                                    }
                                if (jsons)
                                {
      

  5.   

    如果你不想搭建服务器做代理,可以使用yahoo提供的JSONP跨域访问在线代理API<script type="text/javascript" src="http://www.coding123.net/js/jquery.js"></script>
    <script type="text/javascript">
    $(function(){
        $.getJSON("http://query.yahooapis.com/v1/public/yql", {
        q: "select * from json where url=\"http://api.cndns.com/sitestar/getTemplateCategories.aspx?username=cantect&otime=201302281136&checksum=5d3742d59bb86347d71b7145a6615f61\"",
        format: "json"
    }, function(data) {
        var $content = $("#content")
        var rst=data.query.results.json;
        if(rst)alert(rst.status)
    });});
    </script>
      

  6.   

    javascript:
    function GETBIRTHDAYLIST(website,startday,endday,mycontainerid,lnkclass)
    {
      $.getJSON(
                        "http://10.1.8.33/NEWS/NEWS.asmx/GET_PUBLICNOTICE_LIST?callback=?",//webservice调用
                        {USERID:myuserid,PWD:mypwd,STARTDAY:startday,ENDDAY:endday}, //参数调用
                        function(data)
                        {     
                             if (jQuery.parseJSON(data.msg)[0].RESULT=="-1") //取得失败
                             {
                                $('#'+mycontainerid).html(''); return;
                             }
                             
                              var i=0;
                              var jsons ;
                              var BIRTHDAY;
                              var EMPNAME;
                              jsons=jQuery.parseJSON(data.msg);
                               var i=0;
                               var strhtml='';
                             
                                   strhtml= strhtml + "<table id='tablenoticepage' style='width:200px;'>";
                               
                                if (jsons)
                                {
                                    if (jsons.length > 0 )
                                        {
                                         for (i = 0; i <= jsons.length-1; i++) {
    调用的WEBservice
    '若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释
    <System.Web.Script.Services.ScriptService()> _
    '取得某个单位子栏目里面的文章列表
        <WebMethod(EnableSession:=True)> _
      Public Function GET_PUBLICNOTICE_LIST(ByVal USERID As String, ByVal PWD As String, _
                                            ByVal SUBJECTDETAILGUID As String, ByVal TOPCOUNT As String) As String        '判断用户合法性(开始)
            Dim result As String
            result = SetDataBaseInfo(USERID, PWD)
            If result <> "0" Then
                Return GET_NUMBER_RESULT_JSON("-1")
                Exit Function
            End If
            '判断用户合法性(结束)
            Try
                Dim TDT As DataTable = Nothing            TDT = commonread.Get_VIEW_PUBLICNOTICE_MB_READBYCONDITION_BYTOPCOUNT("SUBJECTDETAILGUID ='" & _
                                                                                             SUBJECTDETAILGUID & "' AND STATUS ='0' AND DELSTATUS='1' ", TOPCOUNT)
                Dim rtn As New DataTable("PUBLICNOTICE_LIST")            'fields = "NOTICEGUID,FILEID,FILENAME," & _
                '                   "FILETYPE,FILESIZE,USERID," & _
                '                   "CREATETIME,OTHER,STATUS," & _
                '                    "DEPARTID,SUBJECTID,SUBJECTDETAILID," & _
                '                    "NOTICEID,NOTICENAME,NOTICE," & _
                '                    "VIEWOFNUMBER,NOTICEAUTHOR,NOTICEDATE," & _
                '                    "FLAG,SUBJECTDETAILGUID,SUBJECTDETAILNAME," & _
                '                    "SHOWCOUNT,DEPARTNAME,SUBJECTGUID," & _
                '                    "DEPARTGUID,SUBJECTNAME"            rtn.Columns.Add(New DataColumn("NOTICEGUID"))
                rtn.Columns.Add(New DataColumn("NOTICENAME"))
                rtn.Columns.Add(New DataColumn("VIEWOFNUMBER"))
                rtn.Columns.Add(New DataColumn("EMPNAME"))
                rtn.Columns.Add(New DataColumn("CREATETIME"))
                rtn.Columns.Add(New DataColumn("OTHER"))
                rtn.Columns.Add(New DataColumn("NOTICEAUTHOR"))
                rtn.Columns.Add(New DataColumn("NOTICEDATE"))
                rtn.Columns.Add(New DataColumn("SHOWCOUNT"))            Dim tmpItem As DataRow
                Dim i As Integer
                Dim tuser As DataTable
                Dim empid As String
                empid = commonread.GetEMPID_BYUSERID(Session("LOGINUSERID"))            If Not TDT Is Nothing AndAlso TDT.Rows.Count > 0 Then
                    For i = 0 To TDT.Rows.Count - 1                    '隐藏掉对当前用户不公开的栏目
                        '判断栏目是否公开
                        ' fields = "NOTICEGUID,EMPIDS,EMPNAMES"
                        tuser = commonread.Get_PUBLICNOTICE_MB_USER_READONE(TDT.Rows(i)("NOTICEGUID"))
                        If Not tuser Is Nothing AndAlso tuser.Rows.Count > 0 Then
                            '不公开
                            Continue For
                        Else
                            '公开
                        End If                    tmpItem = rtn.NewRow
                        tmpItem("NOTICEGUID") = Common.ConvertDBNull(TDT.Rows(i)("NOTICEGUID"))
                        tmpItem("NOTICENAME") = HttpContext.Current.Server.UrlEncode(Common.ConvertDBNull(TDT.Rows(i)("NOTICENAME"))).Replace("+", "%20")
                        tmpItem("VIEWOFNUMBER") = Common.ConvertDBNull(TDT.Rows(i)("VIEWOFNUMBER"))
                        tmpItem("EMPNAME") = HttpContext.Current.Server.UrlEncode(commonread.GetEMPNAME_BYUSERID(Common.ConvertDBNull(TDT.Rows(i)("USERID")))).Replace("+", "%20")
                        tmpItem("CREATETIME") = Common.StringToDateTime(Common.ConvertDBNull(TDT.Rows(i)("CREATETIME")), "/")
                        tmpItem("OTHER") = HttpContext.Current.Server.UrlEncode(Common.ConvertDBNull(TDT.Rows(i)("OTHER"))).Replace("+", "%20")
                        tmpItem("NOTICEAUTHOR") = HttpContext.Current.Server.UrlEncode(Common.ConvertDBNull(TDT.Rows(i)("NOTICEAUTHOR"))).Replace("+", "%20")
                        tmpItem("NOTICEDATE") = Common.StringToDate(Common.ConvertDBNull(TDT.Rows(i)("NOTICEDATE")), "/")
                        tmpItem("SHOWCOUNT") = Common.ConvertDBNull(TDT.Rows(i)("SHOWCOUNT"))
                        rtn.Rows.Add(tmpItem)
                    Next
                Else
                    Return GET_NUMBER_RESULT_JSON("-1")
                End If            'Return rtn
                Dim Request As HttpRequest = HttpContext.Current.Request
                Dim callback As String = Request("callback")
                'Dim callback As String = "?"
                Dim Response As HttpResponse = HttpContext.Current.Response
                Dim jsonstr As String = DataTableToJSON(rtn)
                Response.Write(callback & "({msg:'" & jsonstr & "'})")
                Try
                    'Response.End()
                    Response.Flush()
                    Response.Close()
                Catch ex As Exception            Finally            End Try            Return jsonstr
            Catch ex As Exception
                [color=#0000FF]Return GET_NUMBER_RESULT_JSON("-1")
            End Try[/color]
        End Function
     Public Shared Function DataTableToJSON(ByVal dt As System.Data.DataTable) As String
            Dim jsonBuilder As New System.Text.StringBuilder()
            jsonBuilder.Append("[")        For idxOfRow As Integer = 0 To dt.Rows.Count - 1
                jsonBuilder.Append("{")
                For idxOfCol As Integer = 0 To dt.Columns.Count - 1
                    jsonBuilder.Append("""")
                    jsonBuilder.Append(dt.Columns(idxOfCol).ColumnName)
                    jsonBuilder.Append(""":""")
                    jsonBuilder.Append(dt.Rows(idxOfRow)(idxOfCol).ToString())                jsonBuilder.Append(""",")
                Next
                jsonBuilder.Remove(jsonBuilder.Length - 1, 1)
                jsonBuilder.Append("},")
            Next
            jsonBuilder.Remove(jsonBuilder.Length - 1, 1)
            jsonBuilder.Append("]")        Return jsonBuilder.ToString()
        End Function   Private Function GET_NUMBER_RESULT_JSON(ByVal NUMBER As String) As String        Try
                Dim rtn As New DataTable("RESULT")
                Dim tmpItem As DataRow
                rtn.Columns.Add(New DataColumn("RESULT"))
                tmpItem = rtn.NewRow
                tmpItem("RESULT") = NUMBER
                rtn.Rows.Add(tmpItem)
                Dim Request As HttpRequest = HttpContext.Current.Request
                Dim callback As String = Request("callback")
                'Dim callback As String = "?"
                Dim Response As HttpResponse = HttpContext.Current.Response
                Dim jsonstr As String = DataTableToJSON(rtn)
                Response.Write(callback & "({msg:'" & jsonstr & "'})")
                Response.Flush()
                Response.Close()
                Return jsonstr        Catch ex As Exception        End Try
        End Function
      

  7.   

    sui2000 你好!感谢你的热心 但是你提供的例子需服务端提供/增加回调函数才可以使用,但是我现在修改不了服务端得文件,所以你的方法对我这来说可行性并不大,版主那个不用增加回调函数那个更适合我,但是版主提供那个我还在测试ing!
      

  8.   

    1.已经解决了 谢谢版主,和sui2000虽然没用用到你们的代码,但是谢谢你们提供给我的方法,分还是要给版主的,因为版主那个方法给了我很大灵感!
    2.下面的代码我用了jdiy框架,如果你黏贴上去肯定会报错的!jdiy框架 你可以上网找找!我不贴网址了!只贴思路希望能帮下一个你解决 跨域解析json的问题!
    <body>Place your content here</br>
    <p>
    登陆状态: <span id="fname"></span><br /> 
    返回信息: <span id="lname"></span><br /> 
    </p>
    <script type="text/javascript">var txt=
    <%
    String str = new Url("http://api.cndns.com/sitestar/getTemplateCategories.aspx?username=cantect&otime=201302281136&checksum=5d3742d59bb86347d71b7145a6615f61").getHtml();
    out.print(str);
     %>;
    document.getElementById("fname").innerHTML=txt.status 
    document.getElementById("lname").innerHTML=txt.message 
     </script>
     </body>