标准的XMLHttpRequest有效,但在发布到REST服务时jQuery$.ajax无效
standard XMLHttpRequest works, but not jQuery $.ajax when POSTing to REST service
我想对REST服务进行POST。当使用标准的XMLHttpRequest时,它的工作方式是,但当使用jQuery$.ajax时,HTTPRequest标头会变得混乱,POST变成OPTIONS。
我是jQuery和HTTP的新手,所以我可能错过了一些显而易见的东西:)
这项工作:
function sendPostXMLHTTP() {
var jData = { "Name": "Olle" };
var client = new XMLHttpRequest();
client.open("POST", "http://localhost:8383/DEMOService/TestPost");
client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
client.send(JSON.stringify(jData));
}
这不起作用:
function sendPostAjax() {
var jData = { "Name": "Olle" };
$.ajax({
type: 'POST',
url: 'http://localhost:8383/DEMOService/TestPost',
contentType: "text/plain;charset=UTF-8",
data: JSON.stringify(jData)
});
}
从sendPostXMLHTTPRequest()生成的HTTPRequest(正确):
POST http://localhost:8383/DEMOService/TestPost HTTP/1.1
Host: localhost:8383
Connection: keep-alive
Content-Length: 15
Origin: http://localhost:9990
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11
Content-Type: text/plain;charset=UTF-8
Accept: */*
Referer: http://localhost:9990/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
{"Name":"Olle"}
从sendPostAjax()生成的HTTPRequest不正确:
OPTIONS http://localhost:8383/DEMOService/TestPost HTTP/1.1
Host: localhost:8383
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:9990
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11
Access-Control-Request-Headers: Origin, X-Requested-With, Content-Type, Accept
Accept: */*
Referer: http://localhost:9990/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
为什么";jQuery$.ajax"-如何将POST转换为OPTIONS,为什么请求主体会消失?
您是否正在向脚本所在的其他服务器发出请求?
如果是,那么jQuery的请求是正确的,而XMLHttpRequest的请求则不是——您应该自己实现OPTIONS preflight请求。
如果没有,那么您应该考虑更改配置中的某些内容——例如,将脚本移动到REST服务所在的同一网站。
或者,正如评论中所建议的,这可能是您正在使用的jQuery或浏览器中的一个错误。
试试看:
var jData = {name:'Olle'};
$.ajax({
url : 'http://localhost:8383/DEMOService/TestPost',
type : 'POST',
data : jData
});
数据将始终使用UTF-8字符集传输到服务器;您必须在服务器端对其进行适当的解码。另请参阅API
相关文章:
- PHP REST服务抛出异常——希望避免控制台错误
- 跨源请求阻止Spring REST服务+AJAX
- 从javascript客户端验证REST服务
- 将Ajax数据发布到PHP REST服务
- 在Node.js中编写rest服务
- 使用javascript中的相同代码为REST服务调用php函数
- 如何使用angularjs服务将表单参数传递给Rest
- 使用Ajax使用REST服务-同源策略
- 将 json 发送到(不是 REST)WCF 服务
- 如何使用angularJS自定义服务从REST API获取数据
- 是否仍然存在获取Rest服务调用以返回纯字符串的方法
- 从jquery调用REST服务
- REST 服务未注册表单数据
- 从我的Java Web服务以REST响应(xml)发送图像
- 如何在 phonegap for Android 中使用 rest Web 服务
- 在哪里存储具有第三方OAuth2服务的SPA / REST应用程序的refresh_token
- 如何使用 Ajax + jQuery 调用基于 Web 服务 REST
- 窗口小部件-使用JSON响应的Web服务REST
- HTTP服务REST -如何拥有多个PUT方法
- 向Amazon web服务REST api发出请求时,无法使请求签名工作