我正在开发一个JavaScript动态加载的树视图用户控件.我想用真实世界的数据进行测试.
有没有人知道任何提供JSON格式的分层数据访问API的公共服务?
尝试进行调用并检索一个非常简单的一行JSON文件.
$(document).ready(function() {
jQuery.ajax({
type: 'GET',
url: 'http://wncrunners.com/admin/colors.json' ,
dataType: 'jsonp',
success: function(data) {
alert('success');
}
});
});//end document.ready
Run Code Online (Sandbox Code Playgroud)
这是RAW请求:
GET http://wncrunners.com/admin/colors.json?callback=jQuery16406345664265099913_1319854793396&_=1319854793399 HTTP/1.1
Host: wncrunners.com
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2
Accept: */*
Referer: http://localhost:8888/jquery/Test.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Run Code Online (Sandbox Code Playgroud)
这是RAW响应:
HTTP/1.1 200 OK
Date: Sat, 29 Oct 2011 02:21:24 GMT
Server: Apache/1.3.33 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7d SE/0.5.3
Last-Modified: Fri, 28 Oct 2011 17:48:47 GMT
ETag: "166a2402-10-4eaaeaff"
Accept-Ranges: bytes
Content-Length: 16 …Run Code Online (Sandbox Code Playgroud) 坚持这个问题.我有一个包含2个项目的解决方案,其中一个是带有jquery ajax调用的普通旧html,而另一个是WCF服务.html页面将发出对WCF服务的ajax调用以获取json字符串并将其用于显示目的.
现在问题是每当我在调试模式下运行时,html页面和WCF都将以不同的端口启动.当我执行测试时(即在Firefox中调用类型= OPTIONS获得405 Method Not Allowed错误),这为我创建了一个跨源问题.我会在我的ajax脚本上检查调用方法,并且WCF服务是相同的(GET).
我搜索谷歌但发现要么我必须安装扩展程序或在IIS上执行一些配置,我发现这很麻烦,因为我正在做的事情很简单.下面是一个例子,我将在web.config中添加以下配置,但它不起作用:
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="crossDomain" crossDomainScriptAccessEnabled="true" />
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="MobileService.webHttpBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<service name="MobileService.SimpleMemberInfo" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" binding="webHttpBinding" contract="MobileService.IMemberInfo" bindingConfiguration="crossDomain" behaviorConfiguration="MobileService.webHttpBehavior">
</endpoint>
</service>
</services>
</system.serviceModel>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Accept" />
</customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
任何人都有任何想法摆脱这个恼人的问题?
编辑:只是添加,我正在使用与VS …
我到处都看这个.我只需要一个简单的"操作方法"拉jsonp跨域.我正在使用jQuery 1.5.1.
我在另一个网站上的程序中尝试了以下内容:
$.getJSON("http://www.mydomain.com/testjson.json?jsoncallback=?", function(data) {
alert("I'm hitting this.");
}
Run Code Online (Sandbox Code Playgroud)
这根本不起作用.
有没有办法只做一个简单的跨域jquery JSONP调用?
谢谢
我试图从输出以下JSON数据的URL获取JSON数据:
[
{
"belief_desc":"Jesus Died For Your Sins",
"0":"Jesus Died For Your Sins"
},
{
"belief_desc":"People Are Sinful",
"0":"People Are Sinful"
},
{
"belief_desc":"God Loves You",
"0":"God Loves You"
},
{
"belief_desc":"We Must Receive Christ",
"0":"We Must Receive Christ"
}
]
Run Code Online (Sandbox Code Playgroud)
(注意:它仅在此问题中格式化以便于阅读.)
现在我试图使用这个简单的jQuery脚本解析它:
<script>
var url = "http://mySite.com/data.json";
$.getJSON(url, function(data){
alert(data);
});
</script>
Run Code Online (Sandbox Code Playgroud)
我没有从URL获取数据,因为警报不会显示.关于为什么这不起作用的任何想法?
简单的问题,如果我有这样的静态文件(使用mockJSON web生成JSON)
http://www.webwrx.sk/clients/data.json.txt
我需要用这个文件把它改成JSONP吗?我需要以某种方式修改它吗?文件如api.flickr.com有什么不同?
我甚至在该文件中添加了():
http://www.webwrx.sk/clients/data2.json.txt
仍然下面的代码不会工作:
var params = _.extend({
'method': 'GET',
'url': this.url,
'cache': true,
'dataType': 'jsonp',
processData: true
}, options);
return $.ajax(params);
Run Code Online (Sandbox Code Playgroud)
感谢您的任何帮助.
我从JSON-P(来自JSON-P VS JSON和维基百科)了解到的是 - JSON-P的发明是为了克服浏览器的相同原始策略并从另一个域加载JSON对象.stackoverflow上有一篇文章,展示了JSON-P调用的工作原理.看来,如果我?callback=?从URL中删除,JSON-P请求就像普通的JSON调用一样,因此被相同的源策略拒绝.这个实例证明了这一点.
现在我有另一个URL:https://graph.facebook.com/100001612121705.json
我使用以下方法从中加载数据(请访问此处获取实例):
$(document).ready(function() {
$.getJSON("https://graph.facebook.com/100001612121705", null,
function(data) {
$.each(data, function(key, val) {
alert(key + ' is ' + val);
});
});
});?
Run Code Online (Sandbox Code Playgroud)
请注意,我没有使用?callback?带有我的URL,但此请求仍然可以从另一个域获取JSON数据!这对我来说非常令人惊讶.任何人都可以解释为什么这个请求不被同源原则规则拒绝?
PHP
<?php
header('Content-type: application/json');
$return['ip'] = $_SERVER['REMOTE_ADDR'];
$results[] = array(
'ip' => $return['ip']
);
echo json_encode($results);
?>
Run Code Online (Sandbox Code Playgroud)
jQuery的
$.getJSON("http://domain.com/json/",
function(data){
console.log(data.ip);
});
});
Run Code Online (Sandbox Code Playgroud)
但是,当我运行jQuery时,我检查了Fire bug,并说明了以下内容
获取http://domain.com/json/ 200 OK 81ms
并且不响应我要求的IP.我错过了什么吗?
更新的代码
PHP
<?php
header('Content-type: application/json');
$return['ip'] = $_SERVER['REMOTE_ADDR'];
$results = array(
'ip' => $return['ip']
);
echo json_encode($results);
?>
Run Code Online (Sandbox Code Playgroud)
jQuery的
$.getJSON("http://domain.com/json/", function(data){
console.log(data.ip);
});
Run Code Online (Sandbox Code Playgroud)
Firebug错误
SyntaxError:invalid label {"ip":"XXX.XXX.XXX.X"}
箭头指向单词ip之前的第一个引号.
我希望能够从他们的页面获得最近的个人推文.无论如何我能做到吗?如果这还不够,我很抱歉,但我甚至不知道从哪里开始,我在网上找不到其他任何帮助.
json ×7
jquery ×6
jsonp ×4
javascript ×3
ajax ×2
cross-domain ×2
php ×2
backbone.js ×1
c# ×1
cors ×1
syntax-error ×1
testing ×1
treeview ×1
wcf ×1