【发布时间】:2015-09-22 22:26:52
【问题描述】:
我知道如何使用XMLHttpRequest() 来"GET" 数据,并且还想将XMLHttpRequest() 用于"PUT" 数据到一个文件中。我想"PUT" 的数据只是纯文本。关于如何"GET" 数据有很多,但我做了很多研究,并没有发现太多关于如何"PUT"data 的信息。网上有一些问题试图做类似的事情,但通常是"POST",但我发现没有一个问题可以显示工作模型。有人说对于"POST"ing 或"PUT"ing 数据,它的"Content-type" 必须是"application/x-www-form-urlencoded",而不是"text/plain"。我想同步执行我的请求,而不是使用 Node.js。据我发现,这(下)似乎是"PUT" 数据的方式,但不起作用。
数据应该如何"PUT"使用XMLHttpRequest()?
var string = encodeURIComponent("Text String!");
var req = new XMLHttpRequest();
req.open("PUT", "example/data.txt", false);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", string.length);
req.setRequestHeader("Connection", "close");
req.send(string);
我尝试将"text/plain" 用作"Content-type",但浏览器控制台在我要替换的资源中显示“语法错误”,或者如果资源为空白则告诉我“未找到元素”。
【问题讨论】:
-
您尝试过使用 curl 或 fiddler 放置吗?您的端点是否配置了 PUT
-
尝试异步请求。 Sync XHR 已被弃用,并且可能会在非常规请求(CORS、PUT 等)上引发异常。另外,您不需要设置
Content-length,浏览器会自动为您设置。 -
@Bergi,我尝试了一个异步请求并注释掉了
Content-length,但这会在控制台中返回与同步请求相同的结果,并且"PUT"所作用的资源没有变化. -
我被困在这个声明中 -
the browser console gives me a "syntax error" in the resource I want to replace- 我一辈子都无法理解你在这里想说什么。你能发布确切的浏览器控制台消息吗 -
@JaromandaX,浏览器 (Firefox) 准确地说是
"syntax error data.txt:1:1",而data.txt是我向"PUT"请求的文件。data.txt没有任何内容。这是data.txt包含文本的时候。如果data.txt为空,Firefox 会准确地说,"no element found data.txt:1:1"。
标签: javascript http browser xmlhttprequest put