我尝试使用Ajax发送String数据,然后使用Java代码从服务器发回JSON数据。但是每次当我尝试运行javascript时,它都会发出警报" Path Finder:error"。
当我试图在"中返回"在java中排,它只是不起作用,所以我猜它在请求的东西上有问题。
但是当我使用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);
}
});
}
答案 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")
。