我可以在不使用jQuery或其他外部库的情况下在JavaScript中创建跨域JSONP请求吗?我想使用JavaScript本身,然后解析数据并使其成为一个对象,以便我可以使用它.我必须使用外部库吗?如果没有,我该怎么办?
我正在使用angular的$http.jsonp()请求,该请求成功返回包含在函数中的json:
var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=jsonp_callback";
$http.jsonp(url).
success(function(data, status, headers, config) {
//what do I do here?
}).
error(function(data, status, headers, config) {
$scope.error = true;
});
Run Code Online (Sandbox Code Playgroud)
如何访问/解析返回的函数包装JSON?
我的WebAPI部署在Intranet环境中.这意味着安全不是我关注的问题.
看起来CORS 对客户端更友好,更容易实现.
我可能错过了任何其他问题吗?
是否可以将数据发布到JsonP?或者所有数据都必须作为GET请求在查询字符串中传递?
我有很多需要发送到服务的数据,跨域,并且它太大而无法通过查询字符串发送
有什么方法可以解决这个问题?
为了添加一些基本的错误处理,我想重写一段使用jQuery的$ .getJSON来从Flickr中提取一些照片的代码.这样做的原因是$ .getJSON不提供错误处理或使用超时.
因为$ .getJSON只是$ .ajax的包装,所以我决定改写这个东西并惊喜,它完美无缺.
现在开始有趣了.当我故意导致404(通过更改URL)或导致网络超时(没有连接到互联网)时,错误事件根本不会触发.我不知道自己做错了什么.非常感谢帮助.
这是代码:
$(document).ready(function(){
// var jsonFeed = "http://api.flickr.com/services/feeds/photos_public.gne"; // correct URL
var jsonFeed = "http://api.flickr.com/services/feeds/photos_public.gne_______"; // this should throw a 404
$.ajax({
url: jsonFeed,
data: { "lang" : "en-us",
"format" : "json",
"tags" : "sunset"
},
dataType: "jsonp",
jsonp: "jsoncallback",
timeout: 5000,
success: function(data, status){
$.each(data.items, function(i,item){
$("<img>").attr("src", (item.media.m).replace("_m.","_s."))
.attr("alt", item.title)
.appendTo("ul#flickr")
.wrap("<li><a href=\"" + item.link + "\"></a></li>");
if (i == 9) return false;
});
},
error: function(XHR, textStatus, errorThrown){
alert("ERREUR: " + textStatus); …Run Code Online (Sandbox Code Playgroud) 在jQuery中使用JSONP时是否可以捕获错误?我已经尝试了$ .getJSON和$ .ajax方法,但都没有捕获我正在测试的404错误.这是我尝试过的(请记住,这些都可以成功运行,但我想在失败时处理这种情况):
jQuery.ajax({
type: "GET",
url: handlerURL,
dataType: "jsonp",
success: function(results){
alert("Success!");
},
error: function(XMLHttpRequest, textStatus, errorThrown){
alert("Error");
}
});
Run Code Online (Sandbox Code Playgroud)
并且:
jQuery.getJSON(handlerURL + "&callback=?",
function(jsonResult){
alert("Success!");
});
Run Code Online (Sandbox Code Playgroud)
我也尝试添加$ .ajaxError,但这也不起作用:
jQuery(document).ajaxError(function(event, request, settings){
alert("Error");
});
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的回复!
我希望跨域返回一些JSON,我知道这样做的方法是通过JSONP而不是纯JSON.我正在使用ASP.net MVC所以我正在考虑只是扩展JSONResult类型然后extendig Controller,以便它还实现了一个Jsonp方法.这是最好的解决方法,还是内置的ActionResult可能会更好?
编辑:我继续前进并做到了.仅供参考,我添加了一个新结果:
public class JsonpResult : System.Web.Mvc.JsonResult
{
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
if (!String.IsNullOrEmpty(ContentType))
{
response.ContentType = ContentType;
}
else
{
response.ContentType = "application/javascript";
}
if (ContentEncoding != null)
{
response.ContentEncoding = ContentEncoding;
}
if (Data != null)
{
// The JavaScriptSerializer type was marked as obsolete prior to .NET Framework 3.5 SP1
#pragma warning disable 0618
HttpRequestBase request = context.HttpContext.Request;
JavaScriptSerializer serializer …Run Code Online (Sandbox Code Playgroud) 我正在使用JS对象来创建使用Google可视化的图形.我正在尝试设计数据源.起初,我创建了一个JS对象客户端.
var JSONObject = {
cols: [{id: 'date', label: 'Date', type: 'date'},
{id: 'soldpencils', label: 'Sold Pencils', type: 'number'},
{id: 'soldpens', label: 'Sold Pens', type: 'number'}],
rows: [{c:[{v: new Date(2008,1,1),f:'2/1/2008'},{v: 30000}, {v: 40645}]},
{c:[{v: new Date(2008,1,2),f:'2/2/2008'},{v: 14045}, {v: 20374}]},
{c:[{v: new Date(2008,1,3),f:'2/3/2008'},{v: 55022}, {v: 50766}]}]
};
var data = new google.visualization.DataTable(JSONObject, 0.5);
Run Code Online (Sandbox Code Playgroud)
现在我需要动态获取数据.所以我发送一个AJAX请求到一个返回JSON字符串的页面:
"cols: [{id: 'date', label: 'Date', type: 'date'},
{id: 'soldpencils', label: 'Sold Pencils', type: 'number'},
{id: 'soldpens', label: 'Sold Pens', type: 'number'}],
rows: [{c:[{v: new Date(2008,1,1),f:'2/1/2008'},{v: 30000}, {v: …Run Code Online (Sandbox Code Playgroud)