【发布时间】:2014-10-26 19:24:39
【问题描述】:
我正在尝试像这样进行 api 调用:
var url = 'http://[api link]?callback=?';
$.ajax({
type: 'GET',
url: url,
async: true,
xhrFields: {
withCredentials: true
},
jsonpCallback: 'jsonCallback',
contentType: "application/json",
dataType: 'jsonp',
success: function(json) {
console.dir(json.sites);
},
error: function(e) {
console.log(e.message);
}
});
但在浏览器中它总是以这种格式显示:
在提琴手中我收到以下错误:
[InvalidOperationException: A callback parameter was not provided in the request URI.]
WebApiContrib.Formatting.Jsonp.JsonpMediaTypeFormatter.GetPerRequestFormatterInstance(Type type, HttpRequestMessage request, MediaTypeHeaderValue mediaType) + 320
System.Net.Http.Formatting.DefaultContentNegotiator.Negotiate(Type type, HttpRequestMessage request, IEnumerable` 1 formatters) + 199
System.Web.Http.Results.NegotiatedContentResult` 1.Execute(HttpStatusCode statusCode, T content, IContentNegotiator contentNegotiator, HttpRequestMessage request, IEnumerable` 1 formatters) + 103
System.Net.Http.HttpRequestMessageExtensions.CreateResponse(HttpRequestMessage request, HttpStatusCode statusCode, T value, HttpConfiguration configuration) + 235
System.Net.Http.HttpRequestMessageExtensions.CreateErrorResponse(HttpRequestMessage request, HttpStatusCode statusCode, Func` 2 errorCreator) + 298
System.Web.Http.ExceptionHandling.DefaultExceptionHandler.Handle(ExceptionHandlerContext context) + 152
System.Web.Http.ExceptionHandling.DefaultExceptionHandler.HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken) + 12
System.Web.Http.ExceptionHandling. & lt;
HandleAsyncCore & gt;
d__0.MoveNext() + 136
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) + 144
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) + 84
System.Runtime.CompilerServices.TaskAwaiter` 1.GetResult() + 49
System.Web.Http. & lt;
SendAsync & gt;
d__0.MoveNext() + 1584
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) + 144
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) + 84
System.Runtime.CompilerServices.TaskAwaiter` 1.GetResult() + 49
System.Web.Http.WebHost. & lt;
ProcessRequestAsyncCore & gt;
d__0.MoveNext() + 624
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) + 144
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) + 84
System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar) + 98
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 606
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean & amp; completedSynchronously) + 288
在进行调用的 .js 文件中,我定义了一个 函数如下:
jsonCallback = function(data) {
}
我在这里做错了什么?
编辑:
ajax 错误截图:
编辑:
WebapiConfig.cs
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
//add support for JSONP
var formatter = new JsonpMediaTypeFormatter(jsonFormatter, "cb");
config.Formatters.Insert(0, formatter);
//Add Support CORS
config.EnableCors();
【问题讨论】:
-
回调函数名和jsonpCallback属性在文本和大小写上完全匹配?
-
@jmogera 试试
success: function(json, textStatus, jqxhr){console.dir(jqxhr.responseText);},error: function(jqxhr) {console.dir(jqxhr.responseText);};如果可能,可以发帖responseText吗?谢谢 -
@guest271314 我的代码并没有那么远。我收到 500 内部服务器错误。当我用 fiddler 查看调用响应时,我看到了上面的错误列表。
标签: jquery ajax asp.net-web-api jsonp