读书人

跨域访问如何做呢, 访问 json格式的数

发布时间: 2013-06-26 14:29:32 作者: rapoo

跨域访问怎么做呢,? 访问 json格式的数据, 求教,从昨天一直研究这个,也没弄出来
求教


<?php
$ary = array('result'=>0,'message'=>'跨域成功');
$json = json_encode($ary);

echo "$json;";

?>



$.getJSON("http://www.s94994.com/json.php",function(d){
//alert(1)
alert(d+'....40')
});

返回状态是200,但是数据是空, 我要怎么做才能访问到 json格式的数据呢?

JSON PHP
[解决办法]
用jsonp方法来访问其他域名的接口
示例:
$.ajax({
dataType: 'jsonp',
data: 'id=10',
jsonp: 'jsonp_callback',
url: 'http://www.yiwuku.com/getdata',
success: function () {
// do stuff
},
});

[解决办法]
js就是有跨域限制,你先做个中建页比如aaa.aspx ,用后台获取内容,这样就没有跨域限制了,然后再ajax请求这个aaa.aspx就可以了
附后台抓内容的例子

string strJson=GetWebContent("http://www.s94994.com/json.php",Encoding.UTF8);
private string GetWebContent(string Url, Encoding encoding)
{
string strResult = "";
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
//声明一个HttpWebRequest请求
request.Timeout = 90000;
//设置连接超时时间
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
//Encoding encoding = Encoding.UTF8;

StreamReader streamReader = new StreamReader(streamReceive, encoding);
strResult = streamReader.ReadToEnd();
streamReceive.Dispose();
streamReader.Dispose();


}
catch (Exception ex)
{ }

return strResult;
}



这个页写成php的也行,不过语法我不会,不过思路是这样
[解决办法]
ajax不能跨域
百度下jsonp的原理吧,
跨域ajax用的技术不是ajax,而是script节点加载跨域url并url参数传递一个约定的回调函数名
你只需要在服务端ajax接口这样写:
string callback = ???("callback");//获取url中的callback参数
Response.Write(callback+"('跨域返回值')");//往客户端写这样的值
Response.end();

和普通ajax接口差不多,只是多获取一个callback参数,并返回给客户端

这种接口就可以用jquery的jsonp方式跨域调用
[解决办法]
3楼的方法是比较好的 至于jsonp 不建议使用吧。。一般用jsonp获取的内容 硬性要求太多了
[解决办法]
js无法跨域,一定要跨域可以用yahoo的跨域接口,不过最近不是很稳定这个接口。。
[解决办法]
接口兼容,$content.text(JSON.stringify(data.query.results))这句不兼容。。IE木有JSON对象,需要导入json2.js才行
[解决办法]
你的代码呢。。没有使用JSON对象吧
[解决办法]
楼主你有测试过没了。。IE下也可以的,需要倒入json2.js,示例代码

<script type="text/javascript" src="http://www.coding123.net/rardownload/20130106/20130106170832648.js"></script>
<script type="text/javascript" src="http://www.coding123.net/js/jquery.js"></script>
<script>
window.onload=function(){
$.getJSON("http://query.yahooapis.com/v1/public/yql", {
q: "select * from json where url=\"http://m.weather.com.cn/data/101010100.html\"",
format: "json"
}, function(data) {
var $content = $("#content")
if (data.query.results) {
$content.text(JSON.stringify(data.query.results));
} else {
$content.text('no such code: ' + code);
}
});
}
</script>
<div id="content">

</div>

[解决办法]
没注意测试http协议。。这个地址允许所有域名可以跨域Access-Control-Allow-Origin: *

ie要跨域需要使用XDomainRequest这个对象。。连接里面的jquery版本是1.4.2的,木有支持XDomainRequest,你下载高版本的jquery来试试、

既然可以搭建服务器,你还不如做个代理就行了,用php 的curl获取远程的页面内容输出就行了,ajax请求这个代理页面
[解决办法]
服务器:
<?php
$ary = array('result'=>0,'message'=>'跨域成功');
$json = json_encode($ary);

echo "_json=$json;"; // 或者 call_back($json);

?>

js:

function include(src,encoding,fun)
{
var s = $C('script');
s.type='text/javascript';
s.charset=encoding; //'gb2312';
s.src = src;


var tags =$$('head');
if(typeof(fun)=='function'){
if( document.all ){
s.onreadystatechange = function(){
if(/(complete
[解决办法]
loaded)/.test(this.readyState)){
fun(); s.onreadystatechange = null; s.parentNode.removeChild(s);
}};
}else{
s.onload = function(){ fun(); s.onload = null; s.parentNode.removeChild(s); };
}
}
tags[0].appendChild(s);
};

include("1.php","utf-8",function(){alert(_json);})

读书人网 >JavaScript

热点推荐