【发布时间】:2015-01-28 14:44:17
【问题描述】:
我有一个在 localhost:8080 上运行的 web 服务(REST),要调用我使用这个 jquery 代码的 web 服务:
jQuery.ajax({
type: "POST",
url: "http://localhost:8080/user/register",
data: '{"name": "' + name + '","email": "' + email + '","password": "' + password + '"}',
beforeSend: function(x) {
if(x && x.overrideMimeType) {
x.overrideMimeType(jsonMimeType);
}
},
dataType:"jsonp",
Accept : "application/json",
contentType: "application/json",
success: registerUser_success_callback,
error: registerUser_error_callback
});
当我尝试从同一个域(即 localhost:8080)调用这个 javascript 时,它就像一个魅力!这是相同的屏幕截图:
但是当我尝试从不同的域(即 localhost:80)访问相同的域时,它失败了,令人惊讶的是,它不是 POST,而是发出一个 GET 并且我还在我的服务器的日志文件中得到一个日志,说REST 资源不支持 GET 方法。这是相同的屏幕:
根据我在互联网上阅读的内容(尤其是here,很棒的文章!),跨域请求应首先发送一个 OPTIONS 请求(缓存以供以后使用。)我的情况出了什么问题?
我曾尝试使用 FireFox 的插件 RESTClient 以相同的参数调用其余服务,我能够成功调用其余服务(POST 方法),所以这主要是 ajax 部分的问题。
帮我解决这个问题!如果我需要分享更多细节,请让我知道。
PS:@A 之后。 Wolff 建议,我将数据类型从 jsonp 更改为 json,现在我的浏览器发送了 OPTIONS,但之后它并没有发送实际的 POST 请求!!!
【问题讨论】:
-
由于 jsonp 的性质,您不能将 POST 方法与 jsonp 一起使用
-
感谢@A.Wolff 的快速回复!你能更详细地解释一下吗?还是网络链接?
-
可以看到这个问题:stackoverflow.com/questions/4508198/…希望对你有帮助!
-
谢谢!只是好奇,如果请求来自同一个域,为什么它会起作用? @A.Wolff
-
不应该。同样,POST 方法无法创建脚本标记客户端,这是 jsonp 的工作方式。但是使用CORS,你不应该使用jsonp,尝试使用json代替
标签: javascript jquery ajax rest cors