我没有收到来自服务器的JSON类型数据作为响应。
我正在使用JSON插件。
jQuery( "#dialog-form" ).dialog({
autoOpen: false,
height: 500,
width: 750,
modal: true,
buttons :{
"Search" : function(){
jQuery.ajax({type : 'POST',
dataType : 'json',
url : '<s:url action="part" method="finder" />',
success : handledata})
}
}
});
var handledata = function(data)
{
alert(data);
}
如果dataType = 'json'
我没有得到任何回应,但是如果我没有提及任何响应,那么dataType
我正在获取页面的HTML格式。
public String list(){
JSONObject jo = new JSONObject();
try {
Iterator it = findList.iterator();
while(it.hasNext()){
SearchResult part = (SearchResult) it.next();
jo.put("col1",part.getcol1());
jo.put("col2",part.getcol2());
}
log.debug("--------->:"+jo.toString());
} catch (Exception e) {
log.error(e);
}
return jo.toString();
}
struts.xml:
<package name="default" namespace="/ajax" extends="json-default">
<action name="finder"
class="action.Part" method="finder" name="finder">
<result type="json" />
</action>
</package>
JSP页面:
<div id="dialog-form" >
<form action="" id="channelfinder">
<textarea id="products" name="prodnbr"<s:property value='prodNbr'/>
</form>
</div>
控制台错误:
org.apache.struts2.dispatcher.Dispatcher-
无法找到动作或结果没有为动作action.Part和结果定义结果。{和“ col1”:“ col1”,“ col2”:“ col2”}
web.xml
:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>/parts</display-name>
<description>Parts List Web App</description>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.action</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errorPage.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/errorPage.jsp</location>
</error-page>
<!-- Spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
我没有获得有关jQuery成功的数据。请纠正我,这是怎么了?
jQuery AjaxdataType : '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" class="action.PartAction" 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
为字符串
问题内容: 我没有从服务器获得JSON类型数据的响应。 我正在使用JSON插件。 如果我没有得到任何回应,但是如果我没有任何回应,那么我正在获取页面的HTML格式。 控制台错误: -找不到动作或结果没有为动作action.Part和结果定义结果。 我没有获得有关jQuery成功的数据。请纠正我,这是怎么了? 问题答案: 使用A 来指定在执行操作和结果时从回调函数返回的数据类型,以及从服务器返回的响
我一直在努力尝试,但我无法克服这个错误。我有Ruby版本1.8.7和Gem版本2.1.11,我试图安装open project,但我总是遇到这个错误 安装json(1.8.1)gem::installer::extensionbuilderror:错误:未能构建gem本机扩展。 迈克 安装json(1.8.1)时出错,Bundler无法继续。在绑定之前,请确保成功。==>出错:(==>安装中止。
我对Java和TestNg非常陌生。我创建了下面的DataProvider来返回一个hashmap到我的测试方法,但它似乎失败了,我无法找出问题所在。我正在将一个excel文件读入哈希图,并将其存储在列表中。然后我想返回对象中的hashmap。 感谢任何建议
问题内容: 关于以下原因为何的任何想法。 当我将request_url粘贴到浏览器中时,我会获取json数据,但是如果我在php中尝试,则var_dump就是bool(false); 有任何想法吗?? 更新并修复 OK伙计们,感谢您的所有帮助。是的,我帮助我追踪了这一情况。事实证明,php.ini配置为禁止打开url,因此file_get_contents无法正常工作。我在各个站点上发现了以下方便
问题内容: 如何将Webmethod的值以JSON格式返回给客户端? 我要返回两个静态int值。 我是否需要使用这两个属性创建新对象并返回它? GetStatus()方法经常被调用,我不喜欢每次仅用于json格式创建一个特殊对象的想法。 在客户端,我在捕获返回值: 问题答案: 我只想带一个物体。它符合您的需求。如果您有两个返回值,则必须以结构化的方式将它们放在一起。
问题内容: 我正在用Python阅读JSON文件,其中包含许多字段和值(约8000条记录)。Env:Windows 10,Python 3.6.4;码: 这样我得到一个错误。下面是堆栈跟踪: 伴随着我,我尝试了 与此相关,我的程序运行了很长时间,然后挂起,没有任何输出。 我搜索了几乎与此相关的所有主题,但找不到解决方案。 注意:JSON数据是有效的,因为当我在Postman /任何REST客户端上