jquery ajax如何接收并处理LIST里的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery ajax如何接收并处理LIST里的数据相关的知识,希望对你有一定的参考价值。
JQUERY AJAX是否可以接收LIST?怎么接收?怎么获取里面的值?
public String find_staffname()
nameidList=perAndrole_Service.find_staffname(dept);
return "success";
这是action中要返回的List
alert(dept);
$.ajax(
type: "POST",
url: "perandrole1.action",
data: "dept="+dept,
success: function(msg)
alert(nameidList);
);
这是JSP中的JQUERY代码。应该怎么改呢?
我刚刚接触JQUERY,很新手。请教各位大神
能不能加下QQ,使用JSON XML里的配置我不太清楚
追答using System.Web.Script.Serialization;
javascriptSerializer jss = new JavaScriptSerializer();
string strjson=jss.Serialize(List);
这样得到json数据
用的时候 你先把msg 弹出来 有数据之后就直接 msg.Name Name表示你list中的属性
就是不明白XML怎么写,现在弄的好乱,不知道XML中怎么写跳转到JSP页面
result
我要返回到Project/PerAndRole/PersonAndRole.jsp这个
Action里
HttpServletResponse res = ServletActionContext.getResponse();
res.setCharacterEncoding("utf-8");
res.setContentType("text/json");
res.getWriter.write();这里输出json
return null
xml里边
<package name="cjwajax" extends="json-default">
<action name="perandrole1" class="com.wance.Action.PerAndRoleAction_cjw"
method="find_staffname">
</action>
</package>
就OK了本回答被提问者和网友采纳 参考技术C 用 json
jQuery:我可以在较长的 $.ajax 请求待处理时发送和接收 $.ajax 响应吗?
【中文标题】jQuery:我可以在较长的 $.ajax 请求待处理时发送和接收 $.ajax 响应吗?【英文标题】:jQuery: Can I send and receive an $.ajax response while a longer $.ajax request is pending? 【发布时间】:2013-06-18 04:44:46 【问题描述】:情况: 我正在使用 $.ajax() POST 向 php 脚本发送请求,该脚本将大约 400,000-500,000 行插入到数据库中。这始终需要大约 3.5 - 4 分钟。 (在此期间,请求处于 PENDING 状态)。
问题: 我需要一些方法来显示页面上的进度。 (比如一个 %)。我尝试在每 5 秒左右检查一次的 setInterval 中使用 $.ajax(),但它们似乎会在第一个(更长的)$.ajax() 完成时累积起来。
问题: $.ajax() 默认不是异步的吗?这不应该意味着可以在任何时间以任何顺序发送请求,并且应该在任何时间以任何顺序接收响应吗?这甚至与异步有关吗?有没有办法从一个请求中定期发回“半响应”?或者我不能在有待处理的请求/响应时发送和接收请求/响应? (见下图)
提前致谢!!!
multiple requests http://kshaneb.com/reqres.png
【问题讨论】:
图表+1。 :) 您是否考虑过对数据进行分块,即每 10k 行发送单独的请求? +1 用于解释。你试过 async true.. 我同意上面的 Zsolt,考虑将您的数据分块为几个较小的请求,这样可以为您提供更快的响应,您还可以计算已完成请求数的百分比。同样在单个请求中上传大数据,虽然是异步的,但也会导致性能下降。 @ZsoltSzilagy,我正在考虑,但是,实际上大约有 8 个不同的表构成了 500,000 多行。有些表有 3 行,有些表有 300,000+。我可能仍然可以将其分块,但并不想处理决定分块的数量等。看起来乐观的答案可能就是这样。 【参考方案1】:希望对你有用
首先,您需要在 PHP 脚本中禁用输出缓冲区
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i++) ob_end_flush();
ob_implicit_flush(1);
然后您需要在此过程中从 PHP 中回显您的进度,如下所示:
for($i=0;$i < 20;$i++)
echo ($i > 0 ? "#":"").($i/20*100);
sleep(1);
然后,在 javascript 中,您需要监听 xhr readystate 更改事件,当这种情况发生时,只需解析响应文本并根据需要显示进度。
监听事件:
$.ajaxPrefilter(function( options, _, jqXHR )
if ( options.onreadystatechange )
var xhrFactory = options.xhr;
options.xhr = function()
var xhr = xhrFactory.apply( this, arguments );
function handler()
options.onreadystatechange( xhr, jqXHR );
if ( xhr.addEventListener )
xhr.addEventListener( "readystatechange", handler, false );
else
setTimeout( function()
var internal = xhr.onreadystatechange;
if ( internal )
xhr.onreadystatechange = function()
handler();
internal.apply( this, arguments );
;
, 0 );
return xhr;
;
);
和 ajax 请求示例:
$.ajax(
url: "test.php",
cache: false,
onreadystatechange: function( xhr )
res = xhr.responseText.split("#");
$("#id").html(res[res.length-1] + "% done<br/>");
).done(function( data )
$("#id").append("all done!</br>");
);
);
用 jQuery 1.5+ 测试过
【讨论】:
它帮助了我,谢谢。你知道这些代码的跨浏览器兼容性有什么问题吗?【参考方案2】:您长时间运行的 ajax 调用可能会在服务器上打开一个会话,因此由于会话文件锁定,所有下一个请求都会被阻止。
问题: 默认情况下,PHP 将其会话数据写入文件。当对启动会话 (session_start()) 的 PHP 脚本发出请求时,该会话文件被锁定。这意味着如果您的网页向 PHP 脚本发出大量请求,例如,通过 Ajax 加载内容,每个请求都可能锁定会话并阻止其他请求完成。 其他请求将在 session_start() 上挂起,直到会话文件被解锁。如果您的 Ajax 请求之一运行时间相对较长,这尤其糟糕。
解决方案: 会话文件保持锁定状态,直到脚本完成或手动关闭会话。为了防止多个 PHP 请求(需要 $_SESSION 数据)阻塞,您可以启动会话,然后关闭会话。这将解锁会话文件并允许剩余请求继续运行,甚至在初始请求完成之前。
更多信息在这里: http://konrness.com/php5/how-to-prevent-blocking-php-requests/
【讨论】:
It would be preferable 在这里包含答案的基本部分(不仅是原因,还有解决方案),并提供链接以供参考。 谢谢@optimistiks。正如那篇文章中所建议的,我在运行我的 php 脚本的耗时部分之前使用 session_write_close() 并且......它正在工作!无论如何,在本地主机上。我敢肯定,当我将其全部推送到服务器时,将会出现新问题。再次感谢!【参考方案3】:希望对你有帮助
$(function ()
var statusElement = $("#status");
// this function will run each 1000 ms until stopped with clearInterval()
var i = setInterval(function ()
$.ajax(
success: function (json)
// progress from 1-100
statusElement.text(json.progress + "%");
// when the worker process is done (reached 100%), stop execution
if (json.progress == 100) clearInterval(i);
,
error: function ()
// on error, stop execution
clearInterval(i);
);
, 1000);
);
【讨论】:
您的 AJAX 调用不包含 URL。也许应该。【参考方案4】:您可以发布到 iframe 并让 php 生成增量输出并使用 flush 命令发送,而不是进行 ajax 发布。
// send a hash mark for every 1000 inserts
$a = 0;
while ($rec = getDataForNextInsert())
$a++;
// do insert
if ($a%1000 == 0) echo '#'; flush();
然后还可以轮询 iframe 的内容以为最终用户提供漂亮的显示。
【讨论】:
以上是关于jquery ajax如何接收并处理LIST里的数据的主要内容,如果未能解决你的问题,请参考以下文章
jQuery 将 Ajax 调用中的数据传递给 MVC 操作方法