2

我有一个正在测试的简单 ApiController:

namespace SMOnline.Controllers
{
    public class DocumentosController : ApiController
    {
        Documentos[] docs = new Documentos[] 
        { 
            new Documentos { ID = 1, Tipo = 1, Designacao = "FC001"}, 
            new Documentos { ID = 2, Tipo = 1, Designacao = "FC002"}
        };

        public IEnumerable<Documentos> GetAll()
        {
            return docs;
        }
    }
}

在客户端,我从不同的域调用它

$.ajax({
    async: true,
    type: 'GET', //GET or POST or PUT or DELETE verb
    url: apiUrl + 'Documentos/', // Location of the service
    dataType: 'jsonp', //Expected data format from server
})
.done(function (data) {
    // On success, 'data' contains a list of documents.
    $.each(data, function (key, item) {
       alert(item.Designacao);
    })
})
.fail(function (jqxhr, textStatus, error) {
    alert(textStatus + " " + error);
});

我的问题是 JSONP 请求总是返回一个错误

parsererror 错误:未调用 jQuery20301899278084596997_1380125445432

我一直在寻找,但仍然没有找到解决方案。

编辑: 我忘了提到使用提琴手返回的值似乎正确的标题是 200 并且内容是 JSON 数组。

4

3 回答 3

1

通过创建 ActionFilterAttribute 解决了这个问题。我在这个线程JSONP with ASP.NET Web API上的 010227leo 的答案中找到了解决方案

于 2013-09-27T10:17:43.990 回答
1

查看WebApiContrib.Formatting.Jsonp以正确处理您的 JSONP 调用。

在包管理器控制台上:

Install-Package WebApiContrib.Formatting.Jsonp
于 2013-09-25T17:38:06.133 回答
0

为了能够在 web api 中使用不同的输出格式,您必须在FormatterConfig. 还要添加contentType: "application/json"到您的 ajax 调用中。更详细的解释可以在这里找到

于 2013-09-25T18:05:35.283 回答