Java-ajax跨站点空响应字符串

时间:2012-03-17 23:55:48

标签: java jquery ajax cross-site

我正在对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中看到它正在等待输出关闭。

唯一的问题是,无论我做什么,我都没有回复文字。它总是一个空字符串:(

2 个答案:

答案 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/