我正在使用jQuery的getJSONP,我想记录调用的持续时间和响应的大小,以便能够获得有关我的应用程序使用情况的一些统计信息.这是一个跨域的ajax调用,所以我需要使用JSONP,但由于没有使用XMLHttpRequest对象进行JSONP调用,因此来自jquery的ajax的完整回调不会传递响应内容.
所以我的问题是如何从JSONP调用中获取响应大小(内容长度).
$.ajaxSetup(
{
complete:function(x,e)
{
log(x.responseText.length, x.responseText);
}
}
Run Code Online (Sandbox Code Playgroud)
这里x是用于JSON调用的XMLHttpRequest对象,但是对于JSONP调用是未定义的.
在Bing的json请求(bing搜索,而不是map)中苦苦挣扎,我收到一条错误回复,上面写着"无效标签"
我的查询网址是:
var bingurl="http://api.search.live.net/json.aspx?Appid=##APIKEY##&query=Honda&sources=web";
$.ajax({
type: "GET",
url: bingurl,
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
success: function(data) {
$callBack(data);
},
error: function(msg) {
alert("error" + msg);
}
});
Run Code Online (Sandbox Code Playgroud)
Firebug报告'无效标签',然后转储json响应.
不知道出了什么问题?帮助赞赏.
更新1:
我刚刚从jquery 1.4.4升级到1.6.1.这对原始问题中的脚本有何影响?
原始问题:
正如我测试一样,我做了:
$(document).ready(function() {
get_jsonp_feed();
function get_jsonp_feed() {
$.ajax({
url: 'http://www.remote_host.co.uk/feed.php',
type: 'GET',
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: 'jsonpCallback',
error: function(xhr, status, error) {
alert("error");
},
success: function(jsonp) {
alert("success");
}
});
}
function jsonpCallback(data){
alert("jsonpCallback");
}
});
Run Code Online (Sandbox Code Playgroud)
我期待得到2个警报,第一个显示success和第二个显示jsonpCallback.但我只收到第一个警报success.为什么第二个警报没有出现?
更新1:
我可以通过try/catch来解决这个问题,但是当我知道问题是什么时,我宁愿不使用这个方法:
try {
buildHTML.push( "<tr><td>" + day.td[0].div.abbr.content + "</td><td><img src='" + day.td[1].div.div.img.src + "' /></td><td>" + day.td[2].span[0].span.content + "</td><td>" + day.td[3].span[0].span.content + "</td><td>" + day.td[4].span[0].span[1].content + "</td>");
} catch(err) {
buildHTML.push( "<tr><td>" + day.td[0].div.abbr.content + "</td><td><img src='" + day.td[1].div.div.img.src + "' /></td><td></td><td>" + day.td[3].span[0].span.content + "</td><td>" + day.td[4].span[0].span[1].content + "</td>");
}
Run Code Online (Sandbox Code Playgroud)
原始问题:
使用以下jsonp服务:
我使用以下脚本来捕获数据:
$(document).ready(function() {
get_bbc_weather();
function get_bbc_weather() {
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%20%3D%20%22http%3A%2F%2Fnews.bbc.co.uk%2Fweather%2Fforecast%2F4276%3F%26search%3Dgerrards%2520cross%26itemsPerPage%3D10%26region%3Dworld%26area%3DGerrards%2520Cross%22%20and%20xpath%3D'%2F%2Ftbody'&format=json&callback=cbfunc22&rand=" + Math.random(),
type: 'GET',
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: 'cbfunc22', …Run Code Online (Sandbox Code Playgroud) 我的网站在Node上运行并使用Express框架.
我的目标是从Yahoo Placefinder api收集数据.它不支持JSONP,所以我需要将我的JQuery.getJSON请求发送到我自己的代理.然后我的代理会向Placefinder api发送一个http请求,并回应响应.
如果我使用的是php而不是Node,我只需要创建一个新的php文件,其中包含对placefinder api的curl请求并回显响应.
但是,我正在使用Node,我不知道从哪里开始.
而且,我正在使用Express框架.
我的问题是:
代理在哪里适合Express框架?公用文件夹?
在哪里可以找到有关如何在Node中编码代理的一些信息?
我是否需要修改Rackspace云(ubuntu)服务器的配置才能实现此目的?
我试图在浏览器(以及Javascript新手)中理解相同的原始策略,并在维基百科上遇到了JSONP页面.该如何使用一节说-
现在,考虑可以指定任何URL,包括返回JSON的URL,作为元素的src>属性.这意味着可以通过> HTML页面中的脚本元素检索JSON.
但是,JSON文档不是JavaScript程序.如果要由浏览器在元素中进行评估,则src URL的返回值必须是可执行的JavaScript.在JSONP使用模式中,URL返回动态生成的JSON,其中包含一个函数调用.这是JSONP的"填充"(或有时候,"前缀").
我的问题是 -
谢谢,
- P.
我打电话给google的词典api,如下所示:
var json = new WebClient().DownloadString(string.Format(@"http://www.google.com/dictionary/json?callback=dict_api.callbacks.id100&q={0}&sl=en&tl=en", "bar"));
Run Code Online (Sandbox Code Playgroud)
但是我得到一个响应,该代码无法正确解析:
json = json.Replace("dict_api.callbacks.id100(", "").Replace(",200,null)", "");
JObject o = JObject.Parse(json);
Run Code Online (Sandbox Code Playgroud)
解析在遇到这个问题时死了:
"entries":[{"type":"example","terms":[{"type":"text","text":"\x3cem\x3ebars\x3c/em\x3e of sunlight shafting through the broken windows","language":"en"}]}]}
Run Code Online (Sandbox Code Playgroud)
该
\ x3cem\x3ebars\X
东西杀了解析
有没有办法用JSON.NET处理这个JSONP响应?
将答案通过阿奎那的另一个"解析JSONP"问题表明不错的正则表达式x = Regex.Replace(x, @"^.+?\(|\)$", "");来处理与JSONP部分(可能需要调整这种情况正则表达式),所以主体这里是如何应对的十六进制编码的字符.
从谷歌应用程序脚本接收jsonp的规范不会在返回数据中导致"意外令牌".
我正在使用angularjs $ http.jsonp - 它不喜欢语法?prefix =?在我的URL谷歌应用程序脚本的末尾.
这适用于jQuery,但我试图通过这个应用程序的所有角度.这是我从以前的用户分叉的小提琴.这是请求,这很好:
function jsonp_example($scope, $http) {
$scope.doRequest = function() {
var url = "https://script.google.com/macros/s/AKfycbyTnhcsnyXKJqZdF8yAppVQjXX935J9-YTJOHyf7jkea16gSsOA/dev?prefix=?";
$http.jsonp(url);
};
Run Code Online (Sandbox Code Playgroud)
请打开控制台.
我有一个REST API服务,写在Node.js + Express上,目前支持JSON格式的响应.
现在,我还需要添加对JSONP响应的支持,所以每个人都可以通过在请求字符串中添加alt = JSONP来获取它.
所以,我的问题是,这是最好的方法吗?
可能,有一个模式,或生活的例子?
谢谢!
如何在客户端和服务器中使用jsonp和CORS在网页上实现跨域ajax调用.
例如,www.mytestsite.com要进行ajax调用www.otherdestinationserver.com,如何实现使用JSONP或CORS实现?