小编bac*_*cab的帖子

XMLHttpRequest/ajax设置Content-Type

我分别试过这两件事:

注意: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和内容类型标题都可以正常工作.我们似乎无法在我们自己的页面上设置内容标题.

javascript ajax jquery json

11
推荐指数
1
解决办法
2万
查看次数

在 Kotlin 中读取 ZipInputStream

我正在尝试使用 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 …

java zipinputstream kotlin

5
推荐指数
2
解决办法
1792
查看次数

如果更改了包含的innerHTML,javascript 复选框事件侦听器将中断

我正在尝试创建复选框并在每个复选框后插入一个空行。当复选框更改时,我想执行一个函数。

我的代码:

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 以添加文本和新行而不丢失事件处理程序?

我的实际代码更加动态并且在循环中完成,但是事件处理程序被删除的问题可以用上面的代码重复。

html javascript checkbox

3
推荐指数
1
解决办法
294
查看次数

标签 统计

javascript ×2

ajax ×1

checkbox ×1

html ×1

java ×1

jquery ×1

json ×1

kotlin ×1

zipinputstream ×1