好吧,这应该是一个相当简单的问题,我可能错过了一些明显的东西。 我有一个简单的脚本向服务器请求:为什么相同的域ajax请求添加jsonp回调参数?
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
和看到萤火虫的要求是:
http://127.0.0.1:144/default.aspx/Get?callback=jQuery1502768168154247801_1298656485388
我只想强调,这代码工作的事实。唯一的问题是jQuery将此请求视为跨域。但为什么?
更新:好吧,在经过了更多的时间和更多的测试之后,我将这个问题缩小到它是jquery 1.5.1中的一个错误。我用旧版本(所有1.4版本)做了一些测试,并且没有问题,请求是使用JSON完成的,并且响应被成功接收。他们所做的改变可能会将这个请求视为CORS?
您是否尝试过完整的uri? (即'http:// domain.com/default.aspx/Get') – 2011-02-25 17:50:39
@ artyom.stv是的,我可以在Firebug中看到它是同一个域。编辑的问题显示如此。 – Victor 2011-02-25 17:53:34
尝试删除'charset = utf-8'。可能吗? – 2011-02-25 18:16:33