好的,这应该是一个相当简单的问题,我可能遗漏了一些明显的东西。 我有一个简单的脚本向服务器发出请求:
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);
}
});
});
这很好,因为它连接到服务器并获取数据,只有一个简单的问题。它将此请求视为跨域请求,因此使用jsonp。 服务器代码在这里:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static MyObject Get(string path)
{
MyObject foo = new MyObject();
return foo;
}
通常这不是问题,除了我正在访问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的变化是什么?
答案 0 :(得分:9)
当我准备提交错误报告时,我搜索了错误数据库,发现了一些匹配相同行为的错误报告。事实证明这是影响新jQuery版本的jQuery验证插件中的一个错误。
答案 1 :(得分:0)
尝试在$ .ajax()调用中明确将crossDomain
设置为false:
$.ajax({
crossDomain: false,
// The rest of your options here.
});