使用Ajax将String数据发送到Java

时间:2015-11-05 19:32:13

标签: javascript java jquery ajax

我尝试使用Ajax发送String数据,然后使用Java代码从服务器发回JSON数据。但是每次当我尝试运行javascript时,它都会发出警报" Path Finder:error"。

当我试图在"中返回"在java中排,它只是不起作用,所以我猜它在请求的东西上有问题。

但是当我使用POSTMAN测试数据时,它可以工作! (如图所示)。 任何人都可以帮我解决这个问题吗?千恩万谢 !! Testing using POSTMAN

的JavaScript:targetpaths.js

var serviceURL = "http://localhost:8080/TransportationNetwork/rest/paths";

$('#findPaths').click(function() {
                getPaths();
});

function getPaths() {
        console.log('display paths');
        $.ajax({
                type:'POST',
                contentType:'application/json', //data type sent to server
                url: serviceURL,
                dataType:"json", // data type get back from server
                data: dataToServer(), //data sent to server 
                success: function(data, textStatus, jqXHR){
                        alert('Path created successfully');
                },
                error: function(jqXHR, textStatus, errorThrown){
                        alert('Path Finder : ' + textStatus);
                }
        });
}

function dataToServer() {
        var array = "";
        var        str1 = $('#source').val();
        var        str2 = $('#target').val();

        array = str1 + "," + str2;

        return array;
}

<!DOCTYPE html>

HTML:

<head>
    <title>Path Finder</title>
</head>

<body>
    <div style="padding-left:100px;font-family: monospace;">
        <h2>Path Finder</h2>

        <div style="width: 200px; text-align: left;">

            <div style="padding:10px;">
                Source Node: <input id="source" name="source" />
            </div>

            <div style="padding:10px;">
                Target Node: <input id="target" name="target" />
            </div>

            <div style="padding:10px;text-align:center">
                <button id="findPaths">Find Paths</button>
            </div>

        </div>

        <ul id="paths"></ul>


</div>

<p id="demo"></p>

<script src="js/jquery-1.11.3.min.js"></script>
<script src="js/targetpaths.js"></script>

Java代码:

@Path("/paths")
public class PathsResource {
        PathDao pathDao;

    public PathsResource() {
            pathDao = new PathDao();
    }

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes("text/plain")
    public List<DirectedEdge> pathsInfo(@QueryParam("st") String st) {
            System.out.println("Searching paths : " + st);
            return pathDao.getEdgeList(st);

    }  

UPDATA:

我将上面的代码更改为以下内容,它确实正确地调用了"System.out.println("Searching paths : " + st);"
但是,浏览器仍然向我发送错误警报,我不知道如何解决这个问题,是因为它没有返回正确的JSON格式?但为什么我在POSTMAN中看到返回的数据是正确的???帮助!

JAVA:

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<DirectedEdge> pathsInfo(@QueryParam("st") String st) {
        System.out.println("Searching paths : " + st);
        return pathDao.getEdgeList(st);
    }  

JAVASCRIPT:

var serviceURL = "http://localhost:8080/TransportationNetwork/rest/paths";

function dataToServer() {
    var array = "";
        str1 = $('#source').val();
        str2 = $('#target').val();

array = str1 + "," + str2;

return array;
}

$('#findPaths').click(function() {
        getPaths();
});

function getPaths() {
    console.log('display paths');
    $.ajax({
        type:'GET',
        url: serviceURL,
        dataType:"json", // data type get back from server
        data:"st=" + dataToServer(), //data sent to server 
        success: function(data){
            alert('Path created successfully');
        },
        error: function(jqXHR, textStatus, errorThrown){
            alert('Path Finder : ' + textStatus);
        }
    });
}

2 个答案:

答案 0 :(得分:0)

我对这个领域并不熟悉,但只是一个猜测,如果您的数据传输()&#39;函数返回类似于&#39; st = 2,8&#39;而不只是&#39; 2,8&#39; ?

答案 1 :(得分:0)

如果你真的想要JSON数据到服务器,只需让dataToServer()返回有效的JSON。这里修改了函数:

function dataToServer() {
    var array = [];
    var str1 = $('#source').val();
    var str2 = $('#target').val();

    array = [str1 , str2];

    return JSON.stringify(array);
}

请记住恢复@Consumes("application/json")