首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >火狐中的JQuery - $.ajax ContentType问题

火狐中的JQuery - $.ajax ContentType问题
EN

Stack Overflow用户
提问于 2011-08-25 01:39:33
回答 3查看 8.8K关注 0票数 3

我正在使用以下代码发出跨域JSON请求,

代码语言:javascript
运行
复制
$.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“中添加和删除代码,但都没有效果。

有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2011-08-25 01:57:03

  1. 您不能使用post方法执行跨浏览器ajax请求,只能使用get

  1. 跨浏览器的ajax请求可以通过JSONP实现,而不是JSON,是的,它们在某种程度上是不同的。

  1. 您需要能够在服务器端处理JSONP请求。

用于发出跨域JSONP请求的jQuery示例代码

代码语言:javascript
运行
复制
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示例代码

代码语言:javascript
运行
复制
$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 */)).')';
票数 1
EN

Stack Overflow用户

发布于 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就会处理它。

代码语言:javascript
运行
复制
url: 'http://www.sample.com/search?',
票数 0
EN

Stack Overflow用户

发布于 2011-08-25 01:49:45

在这里看我的答案:stackoverflow answer for cross domain ajax calls

Javascript不能进行跨域调用。它在IE中“工作”的原因可能是你做了一个帖子,而不是真正地看结果。不同的浏览器处理这类事情的方式不同,IE允许向远程服务器发送帖子,而FF则不允许。

设置一个JSP,ASP,PHP,etc...Proxy是你最好的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7179855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档