我分别试过这两件事:
注意:url是一个包含https url的变量,jsonString包含一个有效的json字符串
var request = new XMLHttpRequest();
try{
request.open("POST", url);
request.setRequestHeader('Accept', 'application/json');
request.send(jsonString);
} catch(e) {
alert(e);
}
Run Code Online (Sandbox Code Playgroud)
和
var options = {
type: "POST",
url: url,
dataType: "json",
data: jsonString,
accept: "application/json"
};
$.ajax(options)
Run Code Online (Sandbox Code Playgroud)
问题是我们发布的系统要求标题Content-Type的值为"application/json".
通过现在的方式,使用的方法是POST,Accept标头是"application/json",Content-Type默认为"application/x-www-form-urlencoded; charset = UTF-8"
在第一个例子中,如果request.setRequestHeader('Content-Type', 'application/json'); 在Accept标题的上方或下方添加1行,使用的方法更改为OPTIONS,Accept标题更改为"text/html,application/xhtml + xml,application/xml; q = 0.9,/ ; q = 0.8"并且Content-Type标题消失,就好像没有看到一样.
在第二个示例中,如果在选项中的任何位置添加了contentType:"application/json",则会发生与第一个示例中相同的事情.
在ajax或XMLHttpRequest中设置Content-Type标头的正确方法是什么?
编辑:我应该添加使用firefox rest客户端插件,json字符串,url,以及accept和内容类型标题都可以正常工作.我们似乎无法在我们自己的页面上设置内容标题.
我正在尝试使用 Kotlin 和 ZipInputStream 将压缩文件读入 ByteArrayOutputStream()
val f = File("/path/to/zip/myFile.zip")
val zis = ZipInputStream(FileInputStream(f))
//loop through all entries in the zipped file
var entry = zis.nextEntry
while(entry != null) {
val baos = ByteArrayOutputStream()
//read the entry into a ByteArrayOutputStream
zis.use{ it.copyTo(baos) }
val bytes = baos.toByteArray()
System.out.println(bytes[0])
zis.closeEntry() //error thrown here on first iteration
entry = zis.nextEntry
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
java.io.IOException: Stream closed
at java.util.zip.ZipInputStream.ensureOpen(ZipInputStream.java:67)
at java.util.zip.ZipInputStream.closeEntry(ZipInputStream.java:139)
<the code above>
Run Code Online (Sandbox Code Playgroud)
我想可能zis.use在读取条目的内容后已经关闭了条目,所以我删除了zis.closeEntry(),但是在尝试获取下一个条目时它产生了相同的错误
我知道zis.use是安全的并保证输入流已关闭,但我希望它只关闭条目而不是整个流。
打印了整个字节数组后,我知道只有 zip …
我正在尝试创建复选框并在每个复选框后插入一个空行。当复选框更改时,我想执行一个函数。
我的代码:
var div = document.getElementById("test");
var cb1 = document.createElement('input');
cb1.id = "cb_test1";
cb1.type = "checkbox";
cb1.defaultChecked = true;
cb1.onchange = function(){alert("hi")};
div.appendChild(cb1);
div.innerHTML += "box1<br/>";
var cb2 = document.createElement('input');
cb2.id = "cb_test1";
cb2.type = "checkbox";
cb2.defaultChecked = true;
cb2.onchange = function(){alert("hi")};
div.appendChild(cb2);
div.innerHTML += "box2<br/>";
Run Code Online (Sandbox Code Playgroud)
问题是,设置包含 DIV 的innerHTML 似乎会删除事件侦听器,因此当触发 onchange 事件时,不会发生任何事情。
如何修改innerHTML 以添加文本和新行而不丢失事件处理程序?
我的实际代码更加动态并且在循环中完成,但是事件处理程序被删除的问题可以用上面的代码重复。