返回JSON值时出现问题

返回JSON值时出现问题,第1张

返回JSON值时出现问题

jQuery Ajax

dataType : 'json'
使用A
来指定在执行 *** 作和结果时从回调函数返回的数据类型,以及从服务器返回的响应。
success

dataType
(默认值:智能猜测(
xml
json
script
,或
html
))

类型:

String

您期望从服务器返回的数据类型。如果未指定,则jQuery将尝试根据响应的MIME类型来推断它(XML
MIME类型将产生XML,在1.4中,JSON将产生Javascript对象,在1.4中,脚本将执行该脚本,而其他任何内容将是以字符串形式返回)。

该URL应该正确指向动作映射。假定它将在默认名称空间中,否则您应该修改URL和映射以添加

namespace
属性。

<script type="text/javascript">  $(function() {    $("#dialog-form").dialog ({      autoOpen: true,      height: 500,      width: 750,      modal: true,      buttons : {        "Search" : function() {          $.ajax({ url : '<s:url action="part" />', success : function(data) {   //var obj = $.parseJSON(data);   var obj = data;   alert(JSON.stringify(obj)); }          });        }      }    });  });</script>

json
如果您
JSONObject
手动构建,则不需要返回结果类型。您可以返回文本作为流结果,然后根据需要将字符串转换为JSON。

struts.xml

<package name="default" extends="struts-default">  <action name="part"  method="finder">        <result type="stream">      <param name="contentType">text/html</param>      <param name="inputName">stream</param>    </result>  </action></package>

行动:

public class PartAction extends ActionSupport {  public class SearchResult {    private String col1;    private String col2;    public String getCol1() {      return col1;    }    public void setCol1(String col1) {      this.col1 = col1;    }    public String getCol2() {      return col2;    }    public void setCol2(String col2) {      this.col2 = col2;    }    public SearchResult(String col1, String col2) {      this.col1 = col1;      this.col2 = col2;    }  }  private InputStream stream;  //getter here  public InputStream getStream() {    return stream;  }  private List<SearchResult> findList = new ArrayList<>();  public List<SearchResult> getFindList() {    return findList;  }  public void setFindList(List<SearchResult> findList) {    this.findList = findList;  }  private String list() {    JSonObject jo = new JSonObject();    try {      for (SearchResult part : findList) {        jo.put("col1", part.getCol1());        jo.put("col2", part.getCol2());      }      System.out.println("--------->:"+jo.toString());    } catch (Exception e) {      e.printStackTrace();      System.out.println(e.getMessage());    }    return jo.toString();  }  @Action(value="part", results = {    @Result(name="stream", type="stream", params = {"contentType", "text/html", "inputName", "stream"}),    @Result(name="stream2", type="stream", params = {"contentType", "application/json", "inputName", "stream"}),    @Result(name="json", type="json", params={"root", "findList"})  })  public String finder() {    findList.add(new SearchResult("val1", "val2"));    stream = new ByteArrayInputStream(list().getBytes());    return "stream2";  }}

我对结果类型和内容类型放置了不同的结果,以更好地描述这个想法。您可以返回这些结果中的任何一个,并返回是否为字符串化的JSON对象。字符串化版本需要解析返回的数据以获得JSON对象。您还可以选择哪种序列类型更好地进行序列化以满足您的需要,但是我的目标是表明,如果需要序列化简单对象,则不需要json插件来使其工作。

参考文献:

  • 我们如何返回文本字符串作为响应

  • 如何转换

    JSONObject
    为字符串



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5050198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存