为什么同一域ajax请求添加jsonp回调参数?

Vic*_*tor 3 asp.net ajax jquery json

好吧,这应该是一个相当简单的问题,我可能遗漏了一些明显的东西.我有一个简单的脚本向服务器发出请求:

var DTO = { 'path': path };
var url = 'default.aspx/Get'; 

 var test;
$('#getInstance').click(function () {
            $.ajax({
                url: url,
                type: 'POST',
                dataType: 'json',
                data: JSON.stringify(DTO),
                contentType: 'application/json; charset=utf-8',
                success: function (msg) {                    
                    test = msg;
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    alert(textStatus);
                    alert(errorThrown);
                }
            });

        });
Run Code Online (Sandbox Code Playgroud)

这很好,因为它连接到服务器并获取数据,只有一个简单的问题.它将此请求视为跨域请求,因此使用jsonp.服务器代码在这里:

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static MyObject Get(string path)
    {
        MyObject foo = new MyObject();

        return foo;
    }
Run Code Online (Sandbox Code Playgroud)

通常这不会是一个问题,除了我访问WebMethod,它没有能力返回一个jsonp响应(意味着它无法将回调函数附加到响应.现在,如果这是一个手动响应,我可以破解它并附加参数,但我正在利用内置的序列化,所以没有办法搞砸响应.

为了帮助澄清.该页面托管在:

http://127.0.0.1:144/default.aspx

并且在firebug中看到的请求是:

http://127.0.0.1:144/default.aspx/Get?callback=jQuery1502768168154247801_1298656485388

让我强调一下这段代码的工作原理.唯一的问题是jQuery将此请求视为跨域.但为什么?

更新:嗯,经过更多的时间和更多的测试后,我已经将这个问题缩小到了jquery 1.5.1中的一个错误.我使用旧版本(所有1.4版本)进行了一些测试,我没有遇到任何问题,请求是使用JSON进行的,并且响应已成功收到.他们将这个请求视为CORS的变化是什么?

Vic*_*tor 9

经过一番研究,终于确定了这个问题.如我上次更新中所示,该问题与使用jQuery 1.5版本有关.当我没有想法时,我尝试了之前的jQuery版本,你知道什么,它按预期工作.

当我准备提交错误报告时,我搜索了错误数据库并发现了一些匹配相同行为的错误报告.事实证明这是影响新jQuery版本的jQuery验证插件中的一个错误.

我发布了一篇博客文章并附上解释