gpt4 book ai didi

jquery - 将 Wicket AbstractAjaxBehavior 与 jQuery.ajax() 结合使用

转载 作者:行者123 更新时间:2023-12-03 22:40:45 24 4
gpt4 key购买 nike

我已使用 jQuery AJax 调用来发送 JSON,如 StackOverflow 中所述。

问题是我没有在服务器上收到任何数据。我可以看到该调用确实达到了目标 ajax 行为 - 但在 onRequest() 方法中,RequestCycle dd 不包含任何参数

我的 Wicket 口代码:

        AbstractAjaxBehavior ajaxSaveBehaviour = new AbstractAjaxBehavior(){
private static final long serialVersionUID = 1L;

@SuppressWarnings("unchecked")
public void onRequest()
{
//get parameters
final RequestCycle requestCycle = RequestCycle.get();



final PageParameters pageParameters = new PageParameters(requestCycle.getRequest().getParameterMap());
logger.info(" I have received something 1");

for(String pkey: requestCycle.getRequest().getParameterMap().keySet()){
String[] valArry= requestCycle.getRequest().getParameterMap().get(pkey);
StringBuffer sb = new StringBuffer();
for(String s: valArry) sb.append(s).append(" , ");
logger.info("pk :"+ pkey + " = "+ sb.toString());
}

//do something using nice json library to produce a string of json

logger.info(" I have received something 2");
for(String key: pageParameters.keySet()){
Object o= pageParameters.get(key);
logger.info("received key : "+ key + " = " +o.toString());
}





String data="ok";

requestCycle.setRequestTarget(new StringRequestTarget("application/json", "utf-8", data));
}


};
add(ajaxSaveBehaviour);
String callBackURL= ajaxSaveBehaviour.getCallbackUrl().toString();

我的 Javascript 调用此方法

console.log(" call back url :"+ callBackURL);
$.ajax({
url: callBackURL,
type: 'post',
cache: false,

data:JSON.stringify(ccbArry[0]),
contentType: 'application/json',
dataType: 'json',
complete: function() {
alert(" completed okey dokey!")
}

});

从我的 Firebug 控制台中,我可以看到 JSON POST 已成功完成,并且警报(“完成了okey dokey!”) dos 被触发。

问题是在 Wicket AbstractAjaxBehavior 上无法在 RequestCycle 中找到任何参数。

我有什么遗漏的吗?有趣的是,我运行 this is debugger asn 时找不到任何参数。这看起来像是编码问题。

从 Firebug 中,我可以看到这是进行的调用

http://localhost:8080/mywebapp-web-1.0-SNAPSHOT/?wicket:interface=:0::IActivePageBehaviorListener:0:&wicket:ignoreIfNotActive=true&%7B%22type%22%3A9504%2C%22sourceNewsClipBean%22%3A%7B%22type%22%3A9503%2C%22id%22%3A%224cf05752acc1d6aebface86d%22%2C%22typeString%22%3A%22NEWSCLIP_TYPE%22%7D%2C%22startOffset%22%3A%22195%22%2C%22clipDuration%22%3A%22297%22%7D=

不知何故,这些参数并不出现在RequestCycle 中。这看起来像是一个 encodong 问题。有什么想法吗?

最佳答案

好吧,我找到了解决方案:关键是不要使用 requestCycle.getRequest().getParameterMap() 从浏览器读取 JSON。相反,直接从 servlet 输入流读取数据,如下所示:它有效。

            public void onRequest()
{
//get parameters
final RequestCycle requestCycle = RequestCycle.get();


WebRequest wr=(WebRequest)requestCycle.getRequest();

HttpServletRequest hsr= wr.getHttpServletRequest() ;

try {
BufferedReader br = hsr.getReader();

String jsonString = br.readLine();
if((jsonString==null) || jsonString.isEmpty()){
logger.error(" no json found");
}
else {
logger.info(" json is :"+ jsonString);
}



} catch (IOException ex) {
logger.error(ex);
}


// json string to retir to the jQuery onSuccess function
String data=getReturnJSONValue();

logger.info("returning json :"+ data);
IRequestTarget t = new StringRequestTarget("application/json", "UTF-8", data);
getRequestCycle().setRequestTarget(t);


//requestCycle.setRequestTarget(new StringRequestTarget("application/json", "utf-8", data));
}

关于jquery - 将 Wicket AbstractAjaxBehavior 与 jQuery.ajax() 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4976244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com