Problem der Rückkehr JSON-Wert
Ich bin nicht immer Antwort als JSON-Daten vom server.
Ich bin mit JSON-plugin.
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);
}
Wenn dataType = 'json'
ich erhalte keine Antwort, aber wenn ich nicht zu erwähnen dataType
ich bin immer das HTML-format der Seite.
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-Seite:
<div id="dialog-form" >
<form action="" id="channelfinder">
<textarea id="products" name="prodnbr"<s:property value='prodNbr'/>
</form>
</div>
Konsole Fehler:
org.apache.struts2.dispatcher.Dispatcher - Konnte nicht finden, Aktion oder Ergebnis
Kein Ergebnis definiert für action.Teil
und das Ergebnis {"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>
Ich bin nicht immer Daten an jQuery-Erfolg.
Bitte korrigieren Sie mich, was läuft hier falsch?
- Bitte schauen Sie in Frage jetzt.
- Aktualisiert die Frage. Funktioniert immer noch nicht...
- Sie sollten nicht zurück gegeben werden json-string, entweder Rückkehr nichtig oder Rückkehr VERFEHLEN. Als Sie returnning json-string sind Sie ting-Konsole Fehler
- Beachten Sie, dass Ihr Textbereich ist selbst geschlossen und dann wieder geschlossen 🙂
- versuchen Sie, die Verwendung von GET statt POST
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen
dataType : 'json'
wird von jQuery Ajax, um einen Datentyp anzugeben, der voraussichtlich wieder von dersuccess
callback-Funktion, wenn die Aktion und das Ergebnis ausgeführt wird, und einer Antwort, die vom server zurückgegeben werden.Sollte die URL korrekt zeigen Sie auf den Aktion-mapping. Nehme an, es wird in die Standard-namespace, ansonsten sollten Sie das ändern der URL und mapping auf hinzufügen
namespace
Attribut.Rückkehr
json
Ergebnis-Typ ist nicht erforderlich, wenn Sie bauen dieJSONObject
manuell. Sie können den text wieder als stream Ergebnis dann konvertieren einen string in JSON, wenn nötig.struts.xml
:Aktion:
Ich platziert haben unterschiedliche Ergebnisse mit Ergebnis Art und Inhalt geben, um besser zu beschreiben, die Idee. Sie konnte wieder diese Ergebnisse und return JSON-Objekt entweder stringified oder nicht. Die stringified-version erfordert das Parsen der zurückgegebenen Daten um das JSON-Objekt. Sie können auch wählen Sie die ergebnisart besser serialisiert, um Ihre Bedürfnisse anzupassen, aber mein Ziel war es, zu zeigen, dass, wenn Sie brauchen, um zu serialisieren Sie das Objekt einfach dann json-plugin ist nicht notwendig, um es arbeiten.
Referenzen:
JSONObject
- stringstruts-default.xml
. 2. Es ist ajax also Seite nicht aktualisieren.struts.xml
konfigurierte ich das ActionMapping, das führt standardmäßig den Namen "Erfolg", dass die Namen zurück, die Aktion, sollten Sie entweder für meine Konfiguration oder andere Frage stellen, wie Sie zu beheben "keine Aktion und kein Ergebnis gefunden".web.xml
. Eine weitere option ist die Verwendung von convention-plugin zum anzeigen Ihrer Aktion. Aber Sie Stand in der Frage, dass die Aktion ausgeführt wird, so, wie Sie anzeigen die Aktion an der Konfiguration? Und die Methodefinder
ist, dass Ihre Aktion zugeordnet, muss zurückAction.SUCCESS
nicht das Ergebnis einerlist()
.Über die Struts2-JSON-Plugin
Struts2 JSON-Plugin arbeitet in einer bestimmten Weise:
Es serialisiert die gesamte Aktion in JSON, außer
Wenn Sie nicht wollen, dass die ganze Aktion serialisiert werden, sondern nur ein Objekt Ihrer Wahl, können Sie ein Root-Objekt:
kann man das in
struts.xml
wie diese:während der Aktion haben sollte:
Wo CustomObject werden kann, eine Primitive, eine Zeichenkette, ein Array, etc...
Verwenden es auf diese Weise (die Art und Weise es wird gebaut), können Sie zurück
SUCCESS
undERROR
wie in jeder anderen AJAX-Struts2 Action, ohne die framework-Konventionen und den Zugriff auf die serialisierten JSON-Objekt aus der callback-Funktion der AJAX-jQuery-Aufruf wie jedes andere Feld (bei Verwendung rootObject, die "Daten" vonvar handledata = function(data)
wäre Ihrem Objekt, sonst wäre Ihre Aktion).Zu Ihrem konkreten Fall
In Ihrem Fall, nehmen wir an, Ihre Objekt-Struktur sieht wie folgt aus
könnte man eine Liste erstellen, die ein Objekt mit zwei Spalten:
Wert Objekt
Action-Klasse
Struts.xml
Testen es in der AJAX-Callback-Funktion, verwenden Sie einfach
$.each
:Natürlich können Sie eine
List<List<String>>
anstelle von einem Benutzerdefinierten Objekt oder einem anderen Objekt-Struktur, die Sie wie mehr als das: es war nur, um Ihnen die Idee.