如何利用js跨域查询json数据并放置在html页面中,希望高人能把代码贴出来

gdh2337 2013-02-28 06:55:00
1.我现在有一个这样的api地址他返回的是json格式的数据
http://api.cndns.com/sitestar/getTemplateCategories.aspx?username=cantect&otime=201302281136&checksum=5d3742d59bb86347d71b7145a6615f61

2.我想获取他的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 +'  ');
}
$('#content').html(s);
});

}

</script>


</head>

<body>
<input type="button" value="获取json" onclick="showStudent()" />
<div id="content"></div>
</body>
</html>
...全文
776 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdh2337 2013-03-02
  • 打赏
  • 举报
回复
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>
gdh2337 2013-03-01
  • 打赏
  • 举报
回复
sui2000 你好!感谢你的热心 但是你提供的例子需服务端提供/增加回调函数才可以使用,但是我现在修改不了服务端得文件,所以你的方法对我这来说可行性并不大,版主那个不用增加回调函数那个更适合我,但是版主提供那个我还在测试ing!
sui2000 2013-03-01
  • 打赏
  • 举报
回复
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
gdh2337 2013-03-01
  • 打赏
  • 举报
回复
谢谢你们呀~谢谢 我要参考一下尝试一下 调试好了我会立刻给分的
  • 打赏
  • 举报
回复
如果你不想搭建服务器做代理,可以使用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>
sui2000 2013-02-28
  • 打赏
  • 举报
回复
后台要允许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) {
sui2000 2013-02-28
  • 打赏
  • 举报
回复
我这个是跨域的,已经用在项目里,你参考吧
sui2000 2013-02-28
  • 打赏
  • 举报
回复
<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; } }
gdh2337 2013-02-28
  • 打赏
  • 举报
回复
二楼你好!能提供具体一点的代码吗?
HolyNova 2013-02-28
  • 打赏
  • 举报
回复
跨域请求的话, 需要 Server 端做改动, 只靠前台操作是完成不了的
「已注销」 2013-02-28
  • 打赏
  • 举报
回复

$(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去调用对应的后台程序。

87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧