gpt4 book ai didi

javascript - 标准 XMLHttpRequest 有效,但在 POST 到 REST 服务时 jQuery $.ajax 无效

转载 作者:行者123 更新时间:2023-11-28 09:57:59 24 4
gpt4 key购买 nike

我想向 REST 服务发送 POST。当使用标准 XMLHttpRequest 方式时,它可以工作,但是当使用 jQuery $.ajax 时,HTTPRequest header 会变得困惑,并且 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)
});
}

从 sendPostXMLHTTP() 生成的 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 假设您正在执行 Cross-Origin Resource Sharing要求。根据 W3C 标准,任何 CORS 请求之前都必须有空的 OPTIONS 请求,要求服务器允许后续带有有效负载的请求。

您是否正在向托管脚本的服务器发出请求?

如果是,那么 jQuery 的请求是正确的,而 XMLHttpRequest 的请求则不正确 - 您应该自己实现 OPTIONS 预检请求。

如果不是,那么您应该考虑更改配置中的某些内容 - 例如,将脚本移动到 REST 服务所在的同一网站。

或者,正如评论中所建议的,这可能是 jQuery 或您正在使用的浏览器中的错误。

关于javascript - 标准 XMLHttpRequest 有效,但在 POST 到 REST 服务时 jQuery $.ajax 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9699818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com