我正在对java数据事务进行跨站点ajax(不确定我是否正确命名,所以请原谅我)。 Java文件中的部分代码:
BufferedReader input =
new BufferedReader(new InputStreamReader(connectionsocket.
getInputStream()));
DataOutputStream output =
new DataOutputStream(connectionsocket.getOutputStream());
...
output.writeChars("some random text");
output.close();
我还有一些带有jQuery的index.php文件:
$(document).ready(function()
{
$("#send_data").click(function(){
$.ajax({
type: 'get',
dataType: 'text',
url: 'http://localhost:1024/'+$("#command").val(),
success: function(data) {console.log(data);},
error: function() { console.log("Error"); }
})
});
});
命令正确发送并在Java端正确接收。然后从java到ajax的请求也是 200 OK 。输出也有效。 (例如,如果我删除output.close(),我确实在firebug中看到它正在等待输出关闭。)
唯一的问题是,无论我做什么,我都没有回复文字。它总是一个空字符串:(
答案 0 :(得分:2)
cross-site ajax to java data transaction
和
index.php
和
Java
意味着您违反了same origin policy。您必须使用相同的host:port
组合来检索网页(或至少是执行AJAX的代码的javascript版本)并发送AJAX请求。
换句话说,如果您的JS来自localhost:80
并且您尝试向localhost:1024
发送AJAX请求,那么您违反了安全策略。
有很多方法可以像jsonp一样进行跨域AJAX,但真的需要吗?我建议从servlet提供jQuery代码,或者完全取消PHP,或者甚至更好地重写Scala或Erlang中的所有内容。 :)
答案 1 :(得分:1)
创建dataType:"xml"
尝试与text
一起使用。因为在你的回复中我看不到xml格式,你就是用格式文本创建响应。
$.ajax({
type: 'get',
dataType: 'text',
url: 'http://localhost:1024/'+$("#command").val(),
success: function(data) {console.log(data);},
error: function() { console.log("Error"); }
请阅读此选项以获取选项ajax request http://api.jquery.com/jQuery.ajax/