Php $.post来自循环的调用

Php $.post来自循环的调用,php,jquery,ajax,Php,Jquery,Ajax,我有一个ul和9个li元素。我想在异步模式下通过ajax将一些信息加载到这些li元素中 这很简单,不是吗 我刚刚从jQuery手册中为(I=1;I创建了一个: 默认情况下,所有请求都是异步发送的(即默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和数据类型:“jsonp”请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作 您确定请求不是由浏览器发送的吗?您的php脚本可能不允许多个会话。您是否尝试过使用firebug/

我有一个
ul
和9个
li
元素。我想在异步模式下通过ajax将一些信息加载到这些
li
元素中

这很简单,不是吗


我刚刚从jQuery手册中为(I=1;I创建了一个

默认情况下,所有请求都是异步发送的(即默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和数据类型:“jsonp”请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作

您确定请求不是由浏览器发送的吗?您的php脚本可能不允许多个会话。您是否尝试过使用firebug/chrome inspector检查ajax调用

编辑:

默认情况下,PHP将其会话数据写入文件。当对启动会话的PHP脚本发出请求时(session_start()),此会话文件已锁定。这意味着,如果您的网页向PHP脚本发出大量请求,例如,通过Ajax加载内容,则每个请求都可能会锁定会话并阻止其他请求完成

其他请求将挂起会话_start(),直到会话文件被解锁。如果其中一个Ajax请求运行时间相对较长,则情况尤其糟糕

可能的解决办法:

  • 不需要会话时不要使用会话
  • 阅读/写入必要的信息后关闭会话:

    session_write_close(); 
    
  • 例如,将会话存储在Redis/mySQL中

  • 从jQuery手册:

    默认情况下,所有请求都是异步发送的(即默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和数据类型:“jsonp”请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作

    您确定请求不是由浏览器发送的吗?您的php脚本可能不允许多个会话。您是否尝试过使用firebug/chrome inspector检查ajax调用

    编辑:

    默认情况下,PHP将其会话数据写入文件。当对启动会话的PHP脚本发出请求时(session_start()),此会话文件已锁定。这意味着,如果您的网页向PHP脚本发出大量请求,例如,通过Ajax加载内容,则每个请求都可能会锁定会话并阻止其他请求完成

    其他请求将挂起会话_start(),直到会话文件被解锁。如果其中一个Ajax请求运行时间相对较长,则情况尤其糟糕

    可能的解决办法:

  • 不需要会话时不要使用会话
  • 阅读/写入必要的信息后关闭会话:

    session_write_close(); 
    
  • 例如,将会话存储在Redis/mySQL中
  • 函数加载响应(i){
    var$obj=$('图表'+i);
    $.post(getBaseUrl()+'ajax.php',{dateTime:$('#chart_'+i).data('time'),action:'getChartByDateTime',函数(reponse){
    $($obj).html(response);
    if(i
    函数加载响应(i){
    var$obj=$('图表'+i);
    $.post(getBaseUrl()+'ajax.php',{dateTime:$('#chart_'+i).data('time'),action:'getChartByDateTime',函数(reponse){
    $($obj).html(response);
    如果(i你可以试试这个

    for (var i = 1; i <= 9; i++) {
        var $obj = $('#chart_' + i);
        var time = $('#chart_' + i).data('time');
        (function ($obj, time) {
            $.post(getBaseUrl() + 'ajax.php', {dateTime: time, action: 'getChartByDateTime'}, function (reponse) {
                $obj.html(reponse);
            });
        })($obj, time);
    }
    
    for(var i=1;i您可以试试这个

    for (var i = 1; i <= 9; i++) {
        var $obj = $('#chart_' + i);
        var time = $('#chart_' + i).data('time');
        (function ($obj, time) {
            $.post(getBaseUrl() + 'ajax.php', {dateTime: time, action: 'getChartByDateTime'}, function (reponse) {
                $obj.html(reponse);
            });
        })($obj, time);
    }
    

    for(var i=1;i尝试一次发送所有数据

    var dateTime = [];
    $('.chartContainer').each(function(index,obj) {
        var cnt = index + 1;
        dateTime.push({date:$('#chart_' + cnt).data('time'),el:'#chart_' + cnt});
    
    });
     $.post(getBaseUrl() + 'ajax.php', {dateTime:dateTime , action: 'getChartByDateTime'}, function (reponse) {
           $.each(reponse,function(i,v){
              $(v.el).html(v.procesedData);
           });
    
        });
    
    php:


    尝试一次发送所有数据

    var dateTime = [];
    $('.chartContainer').each(function(index,obj) {
        var cnt = index + 1;
        dateTime.push({date:$('#chart_' + cnt).data('time'),el:'#chart_' + cnt});
    
    });
     $.post(getBaseUrl() + 'ajax.php', {dateTime:dateTime , action: 'getChartByDateTime'}, function (reponse) {
           $.each(reponse,function(i,v){
              $(v.el).html(v.procesedData);
           });
    
        });
    
    php:



    仅代码的答案很少能为OP提供更多的见解/解释,请解释你做了什么/你的代码做了什么以及为什么/它是如何工作的。当然,伙计..!首先我在页面加载上调用了loadresponse函数,在得到post调用的响应后,我再次递归调用该函数。(9次,因为我正在检查条件)。因此,在收到上一次呼叫的响应后,将调用loadresponse…!!就这样..请将其编辑到您的答案中:)评论有被忽略/删除的风险。它不适用于我,它只加载1。无论如何,我想在同一时间获取所有
    li
    的所有数据,而不是一个一个。好的。只是检查了你的编辑…所以你可以做一件事。你可以在开始时隐藏li标记,当循环完成时,你可以让它只显示代码请向OP提供更多的见解/解释,请解释你做了什么/你的代码做了什么以及为什么/它是如何工作的。当然,伙计..!首先我在页面加载时调用了loadresponse函数,在得到post调用的响应后,我再次递归调用该函数。(在检查条件时,我重复了9次)。因此,在收到上一次呼叫的响应后,将调用loadresponse…!!就是这样..请将其编辑到您的答案中:)评论有被忽略/删除的风险。它不适用于我,它只加载1。无论如何,我想在同一时间获取所有
    li
    的所有数据,而不是一个一个。好的。只是检查了你的编辑…所以你可以做一件事。你可以在开始时隐藏li标记,当循环完成时,你可以让它只显示代码请向OP提供更多的洞察力/解释,请解释你做了什么/你的代码做了什么以及为什么/如何工作。相同。逐个加载。仅代码回答很少向OP提供更多的洞察力/解释,请解释你做了什么/你的代码做了什么以及为什么/如何工作。相同。逐个加载。为什么不发送所有9个值o php脚本,处理它们并返回正确的结果?如上面所述,方法是只使用一个请求将所有相关数据发送到服务器onceOk,但这是我的问题。在生产过程中,脚本将运行约3秒。如果
    var dateTime = [];
    $('.chartContainer').each(function(index,obj) {
        var cnt = index + 1;
        dateTime.push({date:$('#chart_' + cnt).data('time'),el:'#chart_' + cnt});
    
    });
     $.post(getBaseUrl() + 'ajax.php', {dateTime:dateTime , action: 'getChartByDateTime'}, function (reponse) {
           $.each(reponse,function(i,v){
              $(v.el).html(v.procesedData);
           });
    
        });
    
    $ajaxresponse =[];
    foreach($_POST['dateTime'] as $datetime) {
       $data = $datetime['date'];//change this with your results
       $ajaxresponse[]= array('procesedData'=>$data,'id'=>$datetime['id'])
    }
    
    return json_encode($ajaxresponse);