【问题标题】:Ajax calls with JSONP doesn't work. Callback not provided使用 JSONP 的 Ajax 调用不起作用。未提供回调
【发布时间】: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


【解决方案1】:

如果你尝试这个,它会返回什么?

$.ajax({
  url: 'http://[api link]', // without the callback at the end
  type: 'GET',
  dataType: 'jsonp',
  success: function (result) {
     $('#jsonp').html(result);
  }
});

【讨论】:

  • 请看我添加的屏幕截图。
  • @jmogera 打开在浏览器中不起作用的链接 http://[api link]。它有效吗?另请查看 WebApiContrib 项目中的示例github.com/WebApiContrib/WebApiContrib.Formatting.Jsonp
  • 在浏览器中,数据确实以 xml 格式加载。我添加了 webapiconfig.cs 文件中的代码。我将尝试根据上面链接的建议进行操作。
  • 尝试了您提供的链接中描述的方向,但同样的错误。在浏览器中运行良好,数据以 xml 格式返回。我还添加了一些代码,向您展示我是如何使用 JSONP 格式的。
  • @jmogera 您的 javascript 现在看起来如何?你能展示一下吗?
猜你喜欢
  • 2014-08-14
  • 2012-10-09
  • 2014-09-10
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 2014-12-31
  • 2012-09-12
  • 2020-09-26
相关资源
最近更新 更多