wyh1987com 发表于 2011-3-2 11:27:51

求救!ajax函数返回值的关联

本帖最后由 wyh1987com 于 2011-3-3 09:02 编辑

现在在做一个类似邮件系统的项目,客户端发送一个带有scriptsessionid的请求,但搜索上文找不到服务端发送了这个id,后来才发现原来服务端是直接计算这个id再返回的,socket发送包的内容如下:
recvbuf412 1024
      "engine._sendData(batch); } }; dwr.engine.setPollMethod = function(type) { "
      "dwr.engine.setPollType(type); }; dwr.engine.setMethod = function(type) { d"
      "wr.engine.setRpcType(type); }; dwr.engine.setVerb = function(verb) { dwr.e"
      "ngine.setHttpMethod(verb); }; dwr.engine.setPollType = function() { dwr.en"
      "gine._debug(\"Manually setting the Poll Type is not supported\"); }; dwr.e"
      "ngine._origScriptSessionId = \"1A5F25F719D5B9AA3D7C22E7EFD27D49\"; dwr.eng"
      "ine._sessionCookieName = \"JSESSIONID\"; dwr.engine._allowGetForSafariButM"
      "akeForgeryEasier = \"false\"; dwr.engine._scriptTagProtection = \"throw 'a"
      "llowScriptTagRemoting is false.';\"; dwr.engine._defaultPath = \"/CsTelex/"
      "dwr\"; dwr.engine._pollWithXhr = \"false\"; dwr.engine._scriptSessionId = "
      "null; dwr.engine._getScriptSessionId = function() { if (dwr.engine._script"
      "SessionId == null) { dwr.engine._scriptSessionId = dwr.engine._origScriptS"
      "essionId + Math.floor(Math.random() * 1000); } return dwr.engine._scriptSessionId; }; dwr.engine._errorHandler = dwr.engine.defaultErrorHandler; dwr"
      ".e"

recvbuf413 1024
      "' :\r\n"
      "         columns = columns1;\r\n"
      "         break;\r\n"
      "      case 'autoNotice' :\r\n"


就是那句return dwr.engine._scriptSessionId应该进行参数化让客户端正确发送请求呢?

andyguo 发表于 2011-3-2 15:36:17

你用的什么协议录制的?

wyh1987com 发表于 2011-3-2 15:40:15

回复 2# andyguo


    socket录制的,系统在刷新邮件的页面中内嵌了ajax,服务器返回的scriptsessionid我找不到,所以客户端发送请求也无法关联

wyh1987com 发表于 2011-3-2 15:41:49

用web/HTML协议的URL BASED同样是这个问题,serve responce页面中找不到返回的scriptsessionid

msnshow 发表于 2011-3-2 21:12:55

这行不是么

ScriptSessionId = \"1A5F25F719D5B9AA3D7C22E7EFD27D49\";

wyh1987com 发表于 2011-3-3 09:01:16

回复 5# msnshow

这个ID还要经过dwr.engine._scriptSessionId = dwr.engine._origScriptSessionId + Math.floor(Math.random() * 1000)处理后才是返回给客户端的ID

msnshow 发表于 2011-3-3 19:57:59

客户端收到的BUF是哪段

wyh1987com 发表于 2011-3-4 10:08:38

回复 7# msnshow

一楼贴的就是接受的BUF吧,用了AJAX的方法,直接返回这段函数了,客户端接受这个包后,发出的请求包如下:
sendbuf494 931
"callCount=1\n"
"page=/CsTelex/telex/acars/omessage/omessageView.jsp\n"
"httpSessionId=<sessionid2>\n"
"scriptSessionId=D9D6F48C4C8AC485A94F8A47EDD3DED3742\n"
"c0-scriptName=OmessageTableManager\n"
"c0-methodName=findOutBoxTableList\n"
"c0-id=0\n"
"c0-e2=string:\n"
"c0-e1=Array:\n"
"c0-e4=string:DESC\n"
"c0-e3=Array:\n"
"c0-e6=number:0\n"
"c0-e5=Array:\n"
"c0-e8=number:20\n"
"c0-e7=Array:\n"
"c0-e10=string:\n"
"c0-e9=Array:\n"
"c0-e12=string:\n"
"c0-e11=Array:\n"
"c0-e14=string:\n"
"c0-e13=Array:\n"
"c0-e16=string:\n"
"c0-e15=Array:\n"
"c0-param0=Object_Object:{parm_s_selectedIds:reference:c0-e1, grid_sort_dat"
"eTime:reference:c0-e3, grid_page_start:reference:c0-e5, grid_page_size:ref"
"erence:c0-e7, grid_search_fields:reference:c0-e9, grid_search_query:refere"
"nce:c0-e11, grid_uxFilter_fields:reference:c0-e13, grid_uxFilter_query:ref"
"erence:c0-e15}\n"
"batchId=0\n"
这时候已经有了scriptsessionid了,是不是客户端自己处理了服务端返回的函数了呢?

hokage2000 发表于 2011-3-4 22:24:34

请问LZ,如果客户端发送不正确的scriptsessionid,会出现什么情况呢?

wyh1987com 发表于 2011-3-8 09:04:15

回复 9# hokage2000


    那段时用来刷新邮件的收件箱的,没发送正确ID就没有刷新成功了

wower1985 发表于 2011-3-10 17:17:15

如果你要做socket关联的话,请参看我的这篇文章http://www.docin.com/p-72573998.html

zhouxiaowen 发表于 2011-3-10 20:56:06

我感觉自己还是个菜鸟,LR。好郁闷啊!

violet0214 发表于 2011-8-5 13:06:05

还是没能解决问题

Old々Man 发表于 2011-12-15 16:49:59

今天我也碰到这个问题,其实在DWR在每个SUBMIT前都会有一个请求将ScriptSessionID获得,然后再再后面用Math生成随机数,只需要每次SUBMIT前获取这个值加上LR的RND数字就可以了
页: [1]
查看完整版本: 求救!ajax函数返回值的关联