如何从客户端JavaScript运行服务器端函数?

问题描述:

debug.html如何从客户端JavaScript运行服务器端函数?

<head> 
<script src="debugBoot.js"></script> 
</head> 
<body onload="init()"> 

<button onclick="alert(dss.getParameters())">Get Params</button> 

</body> 

debugBoot.js

var dss = {}; 

var INVALID_PARAM = -1; 

function init() { 

dss.getParameters = function(){ 
    var rest=new XMLHttpRequest(); 
    rest.open("GET", "http://localhost:8080/MW-war/rest/mw/enumerateParams", false); 
    var data=rest.responseText; 
    var jsonResponse = JSON.parse(data); //line 11 
    console.log(jsonResponse["Data"]); 
    rest.send(jsonResponse); 
    return JSON.parse(data); 
}; 

}

MWRest(接口)

@GET 
@Path("/enumerateParams") 
@Produces(MediaType.APPLICATION_JSON) 
public String[][] enumerateParams(); 

myJavaClass

@Override 
    public String[][] enumerateParams() { 
    // TODO Auto-generated method stub 

    return new String[][] { { "" + PATIENT_ID, "PATIENT_ID" }, { "" + AGE, "AGE" }, 
      { "" + BLOOD_PRESSURE, "BLOOD_PRESSURE" }, { "" + GENDER, "GENDER" }, 
      { "" + SMOKING_HABITS, "SMOKING_HABITS" }, { "" + DIET_FRUITS_VEGGIES, "DIET_FRUITS_VEGGIES" }, 
      { "" + CHOLESTEROL, "CHOLESTEROL" }, { "" + ALCOHOL, "ALCOHOL" }, { "" + ACTIVITY, "ACTIVITY" }, 
      { "" + QUIT_SMOKING, "QUIT_SMOKING" }, { "" + DIET_CEREAL_FIBRE, "DIET_CEREAL_FIBRE" } }; 
} 

我需要做debugBoot.js中的东西 一旦我按下按钮(调试模式下的铬f12),我跳到debugBoot.js并通过f10进行操作,当我来到线

var data=rest.responseText; 

数据是空的... 当我去到线

var jsonResponse = JSON.parse(data); 

有一个错误:

VM5402:1 Uncaught SyntaxError: Unexpected end of JSON input 
at JSON.parse (<anonymous>) 
at Object.dss.getParameters (debugBoot.js:11) 
at HTMLButtonElement.onclick (debug.html?scriptId=2:18) 

我忘了说: 一旦我这个链接去:

http://localhost:8080/MW-war/rest/mw/enumerateParams

我得到这个作为输出:

[["0","PATIENT_ID"],["1","AGE"],["2","BLOOD_PRESSURE"],["3","GENDER"],["4","SMOKING_HABITS"],["5","DIET_FRUITS_VEGGIES"],["6","CHOLESTEROL"],["7","ALCOHOL"],["8","ACTIVITY"],["9","QUIT_SMOKING"],["10","DIET_CEREAL_FIBRE"]] 

我GOOGLE了很多,并发现了一些不那么类似的问题,但没有太多类似于我的问题......任何建议?

+1

你实际上并没有发送请求,是吗?此外,响应将是异步的,而不是瞬时的。请参阅[MDN](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest) – UnholySheep

+0

好吧,您正在发送请求,但是*之后*您尝试读取响应。 – UnholySheep

+0

我怎么不发送请求?与rest.open()和第三个参数在它应该设置异步synchronus,不应该吗? – newb

dss.getParameters = function(){ 
    var rest=new XMLHttpRequest(); 
    rest.open("GET", "http://localhost:8080/MW-war/rest/mw/enumerateParams", false); 
    rest.send(null); 
    if (rest.status === 200) { 
     console.log(rest.responseText); 
    } 
    return JSON.parse(rest.responseText); 
}; 

这个工程... THX很多......现在我有一个POST方法:)

一次我按下按钮,我得到的结果,希望

希望类似的任务这有助于将来的人;)