Problème de retour de valeur JSON
Je ne reçois pas de réponse JSON type de données à partir du serveur.
Je suis en utilisant 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);
}
Si dataType = 'json'
je n'obtiens pas de réponse, mais si je ne parle pas de tout dataType
, je reçois le format HTML de la page.
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>
Page JSP:
<div id="dialog-form" >
<form action="" id="channelfinder">
<textarea id="products" name="prodnbr"<s:property value='prodNbr'/>
</form>
</div>
D'erreur de la Console:
org.apache.struts2.répartiteur.Répartiteur - ne Pouvait pas trouver d'action ou de résultat
Aucun résultat défini à l'action de l'action.Partie
et la suite {"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>
Je ne suis pas d'obtenir des données de jQuery succès.
S'il vous plaît corrigez-moi, quel est le problème ici?
S'il vous plaît examiner la question maintenant.
Ont mis à jour la question. Ne fonctionne toujours pas...
vous ne devriez pas être de retour json chaîne, soit ruturn annuler ou retourner SUCCÈS. Comme vous le returnning chaîne json vous êtes ting d'erreur de la console
Notez que votre textarea est auto-fermé, puis de nouveau fermé 🙂
essayez d'utiliser GET au lieu de POST
Ont mis à jour la question. Ne fonctionne toujours pas...
vous ne devriez pas être de retour json chaîne, soit ruturn annuler ou retourner SUCCÈS. Comme vous le returnning chaîne json vous êtes ting d'erreur de la console
Notez que votre textarea est auto-fermé, puis de nouveau fermé 🙂
essayez d'utiliser GET au lieu de POST
OriginalL'auteur |
Vous devez vous connecter pour publier un commentaire.
Un
dataType : 'json'
est utilisé par jQuery Ajax pour spécifier un type de données que le retour est prévu par lasuccess
fonction de rappel lorsque l'action et le résultat est exécuté, et une réponse retournée par le serveur.L'URL doit pointer correctement à l'action de la cartographie. Supposons qu'il sera dans l'espace de noms par défaut, sinon, il faut modifier l'URL et de la cartographie pour ajouter le
namespace
attribut.Retour
json
type de résultat n'est pas nécessaire si vous générez leJSONObject
manuellement. Vous pouvez renvoyer le texte en tant que résultat courant puis convertir une chaîne JSON si nécessaire.struts.xml
:Action:
J'ai placé des résultats différents, avec un résultat de type de type de contenu et de mieux décrire l'idée. Vous pouviez retourner l'une de ces résultats et retour d'objet JSON soit stringified ou pas. Le stringified version nécessite d'analyser les données renvoyées pour obtenir l'objet JSON. Vous pouvez également choisir le type de résultat mieux sérialise pour répondre à vos besoins, mais mon but était de montrer que, si vous avez besoin de sérialiser l'objet simple alors json plugin n'est pas nécessaire pour qu'il fonctionne.
Références:
JSONObject
à la chaîneAvez-vous déjà eu de la chaîne json dans l'action? Ensuite, vous pourriez obtenir comme données de la réussite de la fonction.
jsonobject à la chaîne de travail.
public String list() { JSONObject jo = new JSONObject(); String partie; partie = build(); jo.put("array",jo); return jo.toString();} - Toujours pas de travail.
Vous ne construisez pas valide jo. Essayez cette myString = new JSONObject().put("JSON", "Hello, World!").toString();
OriginalL'auteur Roman C
Sur Struts2-JSON Plugin
Struts2 JSON Plugin œuvres d'une manière particulière:
Il sérialise l'ensemble de l'Action en JSON, sauf
Si vous ne voulez pas toute l'Action pour être sérialisé, mais seulement un objet de votre choix, vous pouvez spécifier un Objet Racine:
il peut être fait dans
struts.xml
comme ceci:alors que l'Action doit avoir:
Où CustomObject peut être une Primitive, une Chaîne de caractères, un Tableau, etc...
L'aide de cette façon (la façon dont il est construit pour), vous pouvez retourner
SUCCESS
etERROR
comme dans toutes les autres AJAX Struts2 Action, sans briser le cadre de conventions, et l'accès à la sérialisé objet JSON à partir de la fonction de rappel de l'AJAX jQuery appel comme dans tout autre domaine (si vous utilisez rootObject, les "données" devar handledata = function(data)
serait votre objet, sinon il serait de votre Action).Sujet de votre cas particulier
Dans votre cas, en supposant que votre structure de l'objet ressemble à ceci
vous pouvez créer une Liste d'un objet avec deux colonnes:
Objet De Valeur
Classe d'Action
Struts.xml
De le tester dans la Fonction de Callback AJAX, il suffit d'utiliser
$.each
:Bien sûr, vous pouvez utiliser un
List<List<String>>
au lieu d'un objet Personnalisé, ou de toute autre structure de l'objet que vous aimez plus que cela: c'était seulement pour vous l'idée.OriginalL'auteur Andrea Ligios