0

使用 json 参数从 jsp 调用 js 函数时出现问题。

JSP 代码:

  <%
JSONObject json = (JSONObject)request.getAttribute("json");
out.println("json : " + json); // able to print this json object
  %>

  <body onload="printReviews(${json})">
  </body>

Javascript代码:

  function printReviews(jsonobj){
    alert('jsonobj : ' + jsonobj);
  }

另外,我尝试了 scriptlet 方式:onload="printReviews('<%=json%>')"。

我不明白为什么无法在 javascript 中获取 JSON 对象。请建议我任何其他替代方案,将 JSON 对象传递给我从 Servlet 获取的 javascript 函数。

4

1 回答 1

2

我认为这是因为对于代码

body onload="printReview(${json})"

我相信带有 JSON 对象的 jsp EL ${json} 会被强制转换为字符串,并在呈现页面时被其实际内容替换。由于这是 JSON 格式,您显然会有类似 {"mykey":"myvalue"} 的内容。所以发生的事情是你的 printReview 函数实际上变成了类似的东西,

body onload="printReview({"mykey":"myvalue"})"

如您所见,除非您转义双引号或使用单引号来包装 printReview 函数,否则这无法执行,例如

body onload='printReview(${json})'

这应该可以工作,但是直到您的 json 响应中有任何单引号。在这一点上,你也将不得不逃避它

现在,当您在 printReview 中传递变量(在您的情况下为 jsonData)时,不会发生此 JSON 对象到字符串的转换,因此当您将代码更改为

body onload="printReviews(jsonData);"
于 2013-07-13T15:22:16.227 回答