我正在使用以下代码发出跨域JSON请求,
$.ajax({
type:"POST",
crossDomain:true,
contentType: "application/json; charset=utf-8",
data: {
domain: 'domain',
assettypes: 'Article',
sortby: 'mostreadcounter_total',
pagesize: '3',
format: 'json',
apikey: 'apiKey'
},
url: 'http://www.sample.com/search',
dataType: "json",
success: CallSucceed,
failure: CallFail,
beforeSend: function(x) {
if (x && x.overrideMimeType) {
x.overrideMimeType("application/json;charset=UTF-8");
}
}
});但我的电话打不通。在fiddler中,我看到内容类型为'text/html;charset=UTF-8‘,而我显式地将contentType设置为’application/json;charset=UTF-8‘。
当我使用浏览器访问API时,它工作得很好,Fiddler显示了正确的内容类型。但是,一旦我使用JQuery发出请求,我的内容类型就会切换到text/html,并且我的请求会失败,并返回405错误(不允许使用方法)。
这只在Firefox3.6中发生,而不是在IE中:(我已经尝试了两种Get/POSt方法,我尝试在"BeforeSend“中添加和删除代码,但都没有效果。
有什么建议吗?
发布于 2011-08-25 01:57:03
JSONP实现,而不是JSON,是的,它们在某种程度上是不同的。JSONP请求。用于发出跨域JSONP请求的jQuery示例代码
var data = {
domain: 'domain',
assettypes: 'Article',
sortby: 'mostreadcounter_total',
pagesize: '3',
format: 'json',
apikey: 'apiKey'
};
$.ajax({
url: 'http://www.sample.com/search?callback=?',
data: data,
success: CallSucceed,
failure: CallFail,
dataType: 'jsonp'
});处理JSONP请求的PHP示例代码
$domain = $_GET['domain'];
$assettypes = $_GET['assettypes'];
// ... and so on
// you need the callback(success handler) name,
// so you can pass your JSON object to it
$callback = $_GET['callback'];
echo $callback.'('.json_encode(array('success' => true, /* and so on */)).')';发布于 2011-08-25 01:49:29
设置contentType: "application/json",省略编码。JQuery总是使用UTF-8,并且可能不期望附加到末尾的编码。
从JQuery文档中:
contentTypeString
默认值:'application/x-www-form-urlencoded‘
向服务器发送数据时,请使用此内容类型。默认是"application/x-www-form-urlencoded",这在大多数情况下都可以。如果您显式地将内容类型传递给$.ajax(),那么它将始终被发送到服务器(即使没有发送数据)。数据将始终使用UTF-8字符集传输到服务器;您必须在服务器端对其进行适当的解码。
还要注意,要在Javascript中进行跨域调用,您的远程服务器必须实现JSONP Standard/Hack。如果你调用的服务支持它,你只需要在你的网址末尾附加一个?,jQuery就会处理它。
url: 'http://www.sample.com/search?',发布于 2011-08-25 01:49:45
在这里看我的答案:stackoverflow answer for cross domain ajax calls
Javascript不能进行跨域调用。它在IE中“工作”的原因可能是你做了一个帖子,而不是真正地看结果。不同的浏览器处理这类事情的方式不同,IE允许向远程服务器发送帖子,而FF则不允许。
设置一个JSP,ASP,PHP,etc...Proxy是你最好的选择。
https://stackoverflow.com/questions/7179855
复制相似问题