【问题标题】:PHP locked when using jQuery ajax with Wordpress将 jQuery ajax 与 Wordpress 一起使用时 PHP 被锁定
【发布时间】:2014-05-13 04:38:44
【问题描述】:

有一个我无法弄清楚的小问题。 我为一个使用类作为后端的客户端制作了一个小型 Wordpress 插件,并使用一些 jQuery 来做一些前端的事情。

该插件是将一些数据从一个csv导出到数据库中的一个表中,通常每次大约20个csv文件。

每个 csv 都有几件事情要做,我在表中添加了一个名为“step”的字段。 每次在 csv 上完成某事时,都会更新一行,并且“step”字段增加 1。

这是我的问题。 在类内部还有另一个函数“checkSteps”,它通过 jQuery ajax 调用来检查 csv 步骤的过程。

我注意到 ajax 检查会停止,直到所有 csv 文件的 php 进程完成。这是 mysql INSERT 锁定问题吗?

更新---

$wpdb->update( $this->table_name, array( 
        'step' => $database_data['step']
    ),

    array(
        'id' => $database_data['id']
    )
);

监控---

public function monitorCsv($ids){
        global $wpdb;
        $data = explode('-',$ids);

        $db_id = $data[0];
        $file_id = $data[1];        

        if($db_id !== 'null'){
            $db_step = $wpdb->get_var( $wpdb->prepare( 
                "
                    SELECT step 
                    FROM $this->table_name 
                    WHERE id = %d
                ", 
                $db_id
            ) );
            echo $db_step;
        }

        if($file_id !== 'null'){
            $file_step = $wpdb->get_var( $wpdb->prepare( 
                "
                    SELECT step 
                    FROM $this->table_name 
                    WHERE id = %d
                ", 
                $file_id
            ) );        
            echo '-'.$file_step;
        }       

    }

检查---

j('.domonitor').each(function(){
    var ids = j(this).attr('id');

    data = {            
        action: 'csv_do_ajax',
        callback: 'monitorCsv',
        data: ids                               
    };
    j.post(ajaxurl, data, function(response){alert(response);});

    });

【问题讨论】:

  • 需要看一些代码!
  • MyISAM 和 InnoDB 在简单地读取表时都不会锁定表。但是...当您必须更新步骤字段时,它将锁定表格。这在您的场景中是有问题的,因为默认情况下 ajax 调用是异步的,并且常见的浏览器同时允许 2 个 HTTPD 连接。您的 $.each 迭代器将触发 2 times instantly ,然后将继续执行调用,在整个迭代过程中保持 2 个线程,直到迭代完成。话虽如此,不幸的是,我什至不确定这是一个锁定问题。使用$_SESSION 测试,同样的问题?
  • 我摆脱了 .each,尝试使用 $_SESSION。同样的问题。
  • @Ohgodwhy 当您提到 $_SESSION 时,我记得会话数据会锁定 php 文件以防止二次访问。谢谢!

标签: php jquery ajax mysqli


【解决方案1】:

固定。

原来是因为我是通过 Wordpress 的 admin_ajax 方法触发 ajax 方法,会话变量锁定了 php 类。

我所做的是将session_destroy(); 放入我班级的构造方法中。 我不推荐这个

然而,Wordpress 默认不使用会话,我也没有在我的主题或任何东西上使用它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多