没有调用jQuery.ajax转换器

时间:2012-02-20 12:02:14

标签: javascript json jquery jsonp

我遇到了jQuery.ajax转换器的问题 - 我无法调用我的转换器。

我有这个jQuery AJAX代码(简化问题):

    $.ajax({
    url: "http://myurl/myservice",
    dataType: "JSONP",
    cache: false,
    success: function (data, textStatus, jqXHR) { /* do stuff */ },
    error: function (jqXHR, textStatus, errorThrown) { /* do stuff */ },
    timeout: 5000,
    converters: { "JSONP": myConversionFunction }
});

当我使用此代码时,未调用转换器函数 myConversionFunction 。我想使用转换器来转换响应中的日期,如同在其他SO问题中显示的那样但却无法解决它。

使用fiddler我已经检查了响应,它是JSONP,内容类型为“application / x-javascript”。

任何想法我做错了什么?

谢谢, 克里斯。

2 个答案:

答案 0 :(得分:7)

我认为你不能覆盖jQuery的默认转换器,如json。引入您自己的转换器(并在您的说明符中包含text,因为在这种情况下,它是从文本到输出的转换):

$.ajax({
    url: "http://myurl/myservice",
    dataType: "jsonp myConversion",
    cache: false,
    success: function (data, textStatus, jqXHR) { /* do stuff */ },
    error: function (jqXHR, textStatus, errorThrown) { /* do stuff */ },
    timeout: 5000,
    converters: {
        "text myConversion": function(value) {
            console.log("pre-processing...");
            /* do stuff */
            return value;
        }
    }
});

答案 1 :(得分:1)

我使用这样的代码来管理asp.net的'd'数据:

$.ajaxSetup({
    data: "{}",
    dataType: "jsonp",
    type: "POST",
    contentType: "application/json",
    converters:
        {
            "json jsonp": function(msg)
            {
                return msg.hasOwnProperty('d') ? msg.d : msg;
            }
        },
    error: function(xhr, textStatus, errorThrown)
    {
        var errorMessage = "Ajax error: " + this.url + " : " + textStatus + " : " + errorThrown + " : " + xhr.statusText +
                " : " + xhr.status;
        if (xhr.status != "0" || errorThrown != "abort")
        {
            alert(errorMessage);
        }
    }
});

也许你需要把它做成小写,如:

converters:
    {
        "json jsonp": function(msg)
        {
            return yourfunction(msg);
         }
    }