我有一个小的restify api,它与sql server对话并返回xml。 xml响应可能非常大并且由Adobe InDesign使用。 Api调用在浏览器中工作,但是当从InDesign调用时,我得到不完整的xml响应。
InDesign使用名为ExtendScript的专有脚本语言,它使用套接字进行通信。在Streams中不确定是一种选择。
答案 0 :(得分:0)
我有一个非常类似的问题,经过大量的游戏后,我在连接写入和读取之间添加了几秒暂停,这就解决了现在的问题。我不是这个修复的粉丝。谁有更好的主意?我怀疑随着文件变大,你将不得不开始增加超时。
var conn = new Socket;
if (conn.open (host + ":7000","UTF-8"))
{ conn.write("GET /report/" + ReportID +" HTTP/1.0\n" +
"Content-Type: application/xml; charset=UTF-8\n\n");
$.sleep(2000);
reply = conn.read (999999);
conn.close();
}
答案 1 :(得分:0)
您确实需要使用回调和 - > net< - 库。
var net = require('net');
var client = net.connect({port: 8124},
function() { //'connect' listener
console.log('connected to server!');
client.write('world!\r\n');
});
client.on('data', function(data) {
console.log(data.toString());
client.end();
});
client.on('end', function() {
console.log('disconnected from server');
});
我从官方文档中复制了该示例,因为您可以看到您确实需要对事件使用回调,在本例中为de“data”事件,当您获得完整响应时,您将继续发送您的回复。 / p>
您的XML不完整,因为您在Socket完成之前发送响应以接收数据。
记住javascript是非阻塞的,这可能会发生,这就是为什么你需要学习如何使用事件和回调。
请使用网络库。
希望它有所帮助。
PD:我很抱歉我的英语很差,但我试图提供帮助。