我试图创建一个jsonp请求的服务器和客户端,我似乎无法使其工作.我查看了很多指南,博客文章等,但几乎每个人都只显示客户端.
这是我的客户端代码
$.ajax({
dataType: 'application/json',
data: params,
jsonp: 'jsonpCallback',
url: settings.domain + '/httpext.dll?json_cc',
success: function (data) {
//determine the return status
},
error: function (response, status, error) {
//error handling
}
}); //end ajax
Run Code Online (Sandbox Code Playgroud)
现在,服务器正在返回这样的硬编码值
jsonpCallback({"username":"meltingice","posts"1234});
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法得到请求和响应一起工作.目前,响应是返回application/json,所以如果我改变了我的请求,那么期望jsonp它的错误
资源解释为脚本,但使用MIME类型application/json进行传输.未捕获的ReferenceError:未定义jsonpCallback
首先,如您所见,我已经定义了jsonpCallback.
现在,如果我将dataType更改为application/json,那么我会收到此错误
XMLHttpRequest cannot load http://myserver/httpext.dll?json_cc&sid=adsfhasjdkfhajksdghjk%3Basdhg&action=SALE&ccCard=&ccNum=&ccExMM=0&ccExYYYY=0&ccCVV2=&holdersName=&totalDue=0&dueDate=11%2F19%2F2010. Origin http://localhost:59905 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它并没有放入callback=?网址.这令人沮丧.
如何设置服务器端以便我可以使用jsonp调用它?响应类型需要什么?如何格式化返回的数据,以便我的客户端代码可以撤回数据?
我正在使用GWT的JsonpRequestBuilder发出一个跨站点REST请求,其响应是一个JSON对象.
requestObject方法的回调参数是JavaScriptObject.但我不想实现JavaScriptObject,而是直接解析JSON响应.无论如何我可以直接从JavaScriptObject或JsonpRequestBuilder的任何方法获取JSON字符串吗?
我最近一直在研究CouchDB,我目前遇到的问题是我不知道如何使用Javascript访问它.
据我所知,目前我的选择是:
Access-Control-Allow-Origin标头.GET方法的请求.那么我该如何访问数据库呢?
我在表单中有一个Web服务 `http://....../methodName
它返回一个jsonp结果,例如:
methodName(["a":"a", "b":"b"])
Run Code Online (Sandbox Code Playgroud)
GWT提供了JsonpRequestBuilder类来解析jsonp.
JsonpRequestBuilder rb = new JsonpRequestBuilder();
rb.setCallbackParam("callback");
rb.requestObject("http://...../methodName", new AsyncCallback<TestJS>(){
...
});
Run Code Online (Sandbox Code Playgroud)
这个结构向url发出请求:
"http://...../methodName/?callback=__gwt_jsonp_P0.onSuccess".
我的Web服务返回一个回调,其中的methodName不是__gwt_json .....所以gwt无法从该响应创建一个JavaScriptObject.JsonpRequestBuilder也可以使用GET而不是POST.
如何实现这些目的:使用POST发送请求并修改GWT的默认回调名称.
我正在尝试将GET请求中的值绑定到POJO.
这些值是HTTP GET请求中的参数.我使用JSONP传递参数,但是它看起来像JSONP推动JSON对象上到请求行所以它不是真的正在被发送,但是,URL,而不只是名称值对的JSON对象.
是否可以将我的GET请求中的值映射到POJO?当我尝试绑定时,Jersey会给出以下异常
HTTP GET方法public void handleJSONP(MyPojo)不应使用任何实体.
绑定代码在请求体中查找,但它不存在,因为它是GET请求.是否有任何其他方法来绑定请求中的值,而无需为每个方法手动包含@QueryParam条目?
谢谢
这肯定已经得到了回答,但是今天我的谷歌权力已经关闭了,而且我一直在努力解决这个问题.我们正在从旧的PHP基础迁移到基于Jersey的JVM堆栈,这将最终提供可以从许多应用程序中使用的基于JSON的RESTful API.到目前为止,情况非常好,我们喜欢简单的POJO到JSON转换.但是,我们正在处理跨域JSON请求中的困难.我们基本上让所有响应返回JSON(使用@Produces("application/json")并将com.sun.jersey.api.json.POJOMappingFeature设置为true)但是对于JSONP支持,我们需要更改我们的方法以返回JSONWithPadding的实例.这当然还要求我们为每个方法添加@QueryParam("callback")参数,这将基本上复制我们的工作,导致需要两个方法来响应相同的数据,具体取决于是否存在回调参数在请求中.显然,这不是我们想要的.
所以我们基本上尝试了几种不同的选择.对泽西岛来说比较新,我相信这个问题已经解决了.我从几个地方读到我可以写一个请求过滤器,或者我可以扩展JSON Provider.我理想的解决方案是对我们的数据或逻辑层没有影响,而是有一些代码说"如果有回调参数,用回调包围JSON,否则只返回JSON".在这里找到了一个解决方案:http: //jersey.576304.n2.nabble.com/JsonP-without-using-JSONWithPadding-td7015082.html
但是,该解决方案扩展了Jackson JSON对象,而不是默认的JSON提供程序.
什么是最佳做法?如果我在正确的轨道上,我可以扩展的默认JSON过滤器的类是什么?是否需要其他配置?我完全偏离了轨道吗?
我正在使用JSONP尝试从WOT API获取一些结果.请参阅下面的代码:
// Prepare the URL
var url='http://api.mywot.com/0.4/public_link_json?hosts=amazon.co.uk/&callback=cbfunc';
// Lookup
$.getJSON(url, function(data){
alert('success');
});
Run Code Online (Sandbox Code Playgroud)
由于某些原因,这似乎失败了(因为我在浏览器中没有发出警报).经过一些研究后,似乎返回的JSONP在回调函数的末尾有一个空格(在最后一个花括号和右括号之间):
cbfunc({ "amazon.co.uk": { "target": "amazon.co.uk", "0": [ 95, 88 ], "1": [ 95, 87 ], "2": [ 95, 87 ], "4": [ 95, 87 ] } } )
Run Code Online (Sandbox Code Playgroud)
在使用在线JSON格式化程序(http://jsonformatter.curiousconcept.com/)后,看起来这个单独的空间正在抛出整个$ .getJSON()函数,因为它无法处理空间?
JSONP格式是否真的具体?我以为Javascript忽略了空格?我是否正确诊断了这个?有什么办法可以处理JSONP并删除空间吗?
在此先感谢,我正在使用jQUery BTW.
我想访问另一个域上的REST服务.如果,在JQuery中,我指定:
dataType: 'json'
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,它失败了,因为对于跨域调用,必须使用JSONP.
当我将其更改为:
dataType: 'jsonp'
Run Code Online (Sandbox Code Playgroud)
预计到工作,但因为服务器期望失败application/json或application/xml或text/html等,但不是*/*由JSONP请求一起发送.
有没有办法迫使JQuery的投入application/json在Accept请求头,而做一个JSON请求?
我想知道你可以返回标记的图像数量是否有限制?
这是我的代码:
<script type="text/javascript">
$(function() {
$.ajax({
type:'GET',
dataType:'jsonp',
cache: false,
url:'https://api.instagram.com/v1/tags/[TAG NAME]/media/recent?client_id=[CLIENT ID]',
success: function(data) {
for (var i = 0; i < 50; i++) {
$(".pics").append("<li><a target='_blank' href='" + data.data[i].link +
"' class='upshot-instagram' rel='instagram-group'><img src='" + data.data[i].images.thumbnail.url +"' ></img></a></li>");
}
}
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
我有50回来,但我只有20张图片回到我身边.我知道我们有超过250个被标记.
我正在尝试做一些看似简单的事情.获取文本字段的输入,并通过API在themoviedb.org数据库中搜索它.
我正在使用jQuery和支持JSONP的themoviedb.org APIv3.但我得到的只是这个回应:
{"status_code":6,"status_message":"Invalid id - The pre-requisite id is invalid or not found"}
这并没有真正告诉我很多.ID是什么?
我知道的事情:
这是一个jsfiddle,这是关于搜索电影的API文档.另外,请查看此 API 版本的文档.我认为这与查询参数有关.
真的,我不知道我在用JSON做什么,所以我希望这将是一个有助于我理解它的代表性例子.