有没有办法在使用JQuery的getJSON方法时指定回调参数的值?
例如:
$.getJSON('/content?callback=?', function(data) {});
Run Code Online (Sandbox Code Playgroud)
生成以下URL:
content?callback=jQuery15108431726952168015_1299633045933&_=1299633046552
Run Code Online (Sandbox Code Playgroud)
此处的参数由库随机生成.
我想指定自己的回调参数.
我想为每个请求使用相同的回调参数,所以我可以积极地缓存响应.
无法通过搜索(或谷歌)找到答案,所以我会问自己.是否可以处理对zend框架的JSONP调用?
只找到这个页面:
http://framework.zend.com/wiki/display/ZFPROP/Zend_Json_Server+-+Lode+Blomme
但我不确定它是否已经实施!?
谢谢
我有一个问题,我必须从这里得到json:
还有一个选项可以添加回调函数名称,如:
http://templodasdeusas.com.br/game/srv/game.php?srv=home&callback=myFunction
这将返回类似:myFunction({'msgd':'value'});
我想用jQuery制作um ajax请求,这可能吗?我仍然收到正常$ .ajax请求的错误,我被告知我必须使用jsonp或跨站点脚本...它是如何工作的?有人有例子吗?TNX!
在这篇John Resig文章中,他正在使用javascript处理字典大小的单词列表,并且他正在通过来自CDN的ajax加载内容.
这些单词加载了分隔单词的换行符.然后他说跨域失败:
但是有一个问题:我们无法从CDN加载我们的字典!由于CDN位于另一个服务器上(或者在另一个子域上,就像这里的情况一样),我们受浏览器的跨源策略的限制,禁止这些类型的请求.所有这些都不会丢失 - 通过对字典文件的简单调整,我们可以跨域加载它.
首先,我们用空格替换字典文件中的所有结束行.其次,我们用JSONP语句包装整行.因此最终结果看起来像这样:
dictLoaded('aah aahed aahing aas aals ay ... zyzzyvas zzz');
这允许我们对文件执行Ajax请求并使其按预期工作 - 同时仍然受益于浏览器提供的所有缓存和压缩.
所以,如果我正确地阅读这个,只是简单地dictLoaded('original content')在原始内容周围添加他的方法会导致ajax请求不会失败.
那是(把它变成一个函数+参数)真的需要它吗?为什么JSONP解决了跨域访问限制的问题?
我从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数据!这对我来说非常令人惊讶.任何人都可以解释为什么这个请求不被同源原则规则拒绝?
我在运行我的django应用程序的同一主机上运行了一个休息服务器(python bottle).从我的django应用程序我正在使用ajax执行get请求,但请求失败,即使我可以在我的休息服务器上看到请求的状态成功(返回代码200,成功)
我的Ajax代码:
$.ajax({
url: 'http://hostname:port/ListVms/',
crossDomain: true,
contentType: "application/json",
dataType: 'jsonp',
success: function(data) {
alert('worked');
},
error: function() {
alert("Sorry, error retrieving!");
}
});
Run Code Online (Sandbox Code Playgroud)
Python Rest方法:
@route('/ListVms/', method='GET')
def get_event():
return json.dumps(JS)
Run Code Online (Sandbox Code Playgroud)
休息服务的输出:
[22/Aug/2012 10:25:45] "GET /ListVms/?callback=jQuery17102901058990901989_1345656355311&_=1345656355356 HTTP/1.1" 200 44
Run Code Online (Sandbox Code Playgroud) 我是向客户端发送请求的客户端.我的最终目标是在jsonp中发送请求.
这是我发送请求时得到的服务器响应?accept=json(并且因为它不是jsonp而得到无效的会话错误)
{"errorCode":-15,"errorDescription":"SessionNotFoundException - Session not found","success":false,"payload":null}
Run Code Online (Sandbox Code Playgroud)
我可以读它,它很好.
但是,这是服务器响应?accept=jsonp:
jQuery171024326910870149732_1351429007451({"action":"", "type":"", "callerId":""}, {"errorCode":0,"errorDescription":"OK","success":true,"payload":null});
Run Code Online (Sandbox Code Playgroud)
它是这两个对象的形式,我不知道如何阅读:{a},{b}.
当我使用jQuery ajax调用时,服务器数据的输出只是{a}部分:
Object {action: "", type: "", callerId: ""}
我的两个问题是:
{a},{b})的服务器响应是否有效?服务器人通过发送那种对象会犯错误还是有效?这是我使用的ajax调用:
$.ajax({
url:url,
dataType:'jsonp',
success:function(data){
console.log("data is,"data")
//if the call was success
if (data.success) {
//if errors
} else {
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在构建一个小页面,使用jquery的getJSON调用API,然后使用胡子模板(至少是计划)呈现数据.但是我的JSON没有节点根,并且无法使用正确的胡子机制循环访问JSON响应数据.
//start
file : jsonresponse.jsonp
?([{"CountryIsoAlpha3Code":"AFG","CountryName":"Afghanistan"},
{"CountryIsoAlpha3Code":"ALA","CountryName":"Åland Islands"},
{"CountryIsoAlpha3Code":"ALB","CountryName":"Albania"}])
//end
//start
file: tmpl.mustache
<option value="{{CountryIsoAlpha3Code}}">{{CountryName}}</option>
//end
//start
file: render.js
$.getJSON(jsonresponse.jsonp, function(data) {
var tpl = tmpl.mustache,
i=data.length,
html = '';
while(i--){
html = html + mustache.render(tpl, data[i]);
}
//end
Run Code Online (Sandbox Code Playgroud)
我意识到这是完全错误的(仅在模板使用中,假设我实际上正在传递数据和模板)但它确实有效.但如果我想做以下怎么办...我该怎么做!?:
//start
//file : daydreamer.mustache
<h1>This title is only awesome when it's rendered once</h1>
{{#}} //no root node attempt at recursive templating rendering
<option value="{{CountryIsoAlpha3Code}}">{{CountryName}}</option>
{{/}}
//end
Run Code Online (Sandbox Code Playgroud)
如果不清楚请告诉我,我知道一个可怜的问题是眼睛疼痛.我会尽快编辑.谢谢.
我想用AngularJS的$ http服务请求Dailymotion API,但它似乎不像jQuery那样工作.
var url = 'https://api.dailymotion.com/videos?fields=id,audience,onair&ids=xzttq2_c,xrw2w0';
Run Code Online (Sandbox Code Playgroud)
jQuery.ajax({
type: 'GET',
url: url,
dataType: 'jsonp',
success: function(data) {
console.log('Success', data);
},
error: function(data) {
console.log('Error', data);
}
});
Run Code Online (Sandbox Code Playgroud)
使用jQuery,它工作正常.我不必使用回调.
Success
Object {page: 1, limit: 10, explicit: false, has_more: false, list: Array[2]}
Run Code Online (Sandbox Code Playgroud)
$http({
method: 'jsonp',
url: url,
responseType: "json"
}).
success(function (data) {
console.log('Success', data);
}).
error(function (data) {
console.log('Error', data);
});
Run Code Online (Sandbox Code Playgroud)
但是对于Angularjs,它并没有像我预期的那样工作.
Uncaught SyntaxError: Unexpected token :
Run Code Online (Sandbox Code Playgroud) 我正在尝试做一些编码,进一步操作,等等等等,最后得到json对象并返回一个Jsonp(用javascript函数包装的json对象)
我设法创建直到json对象,这是
js_on = {"name": "xxx","job":"unemployed", "remarks": "enjoying_life"}.
Run Code Online (Sandbox Code Playgroud)
我坚持做JSONP部分.我读过的教程非常混乱,需要多行编码.是真的那么复杂还是有更简单的方法呢?我的JSONP代码从以下开始.
callback = request.GET.get('callback')
if callback:
......
......
return(HttpResponse(...,content_type ='application/javascript'))
Run Code Online (Sandbox Code Playgroud)
在服务器端,我使用的是Python和Django框架.谢谢.