You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExtJS 7中JsonStore.sync()未调用对应PHP脚本问题排查

ExtJS4迁ExtJS7后创建/更新失效的配置调整方案

针对你碰到的问题,结合你提供的代码示例,下面是需要检查和调整的store/proxy参数及代码细节:

1. 必须配置模型的idProperty

ExtJS靠模型的idProperty判断是新增(无有效主键)还是更新(有有效主键)操作。如果你的模型没显式配置这个属性,或者配置的字段和数据库主键不匹配,store根本不会触发对应的create/update请求。

给你的模型补充配置示例:

Ext.define('AppName.model.Model_Name', {
    extend: 'Ext.data.Model',
    idProperty: '你的主键字段名', // 比如'id'或'user_id'
    fields: [
        // 你的字段列表
    ]
});

2. 调整Proxy的Writer配置

你的writer设置了encode: true,在ExtJS7中,这个配置会把JSON数据编码成URL参数传递,但如果PHP端是用file_get_contents('php://input')获取数据,就会出现空获取的情况。给你两种调整方案:

方案A:保留encode为true,PHP用$_POST接收

添加allowSingle: true(因为你设置了batchActions: false,确保单条数据能正确编码):

writer: {
    type: 'json',
    writeAllFields: true,
    encode: true,
    rootProperty: 'data',
    allowSingle: true // 新增配置,保证单条数据正确编码
}

PHP端接收示例:

$data = $_POST['data'];
$record = json_decode($data, true);

方案B:设置encode为false,传递纯JSON数据

这种方式更符合RESTful规范,需要添加请求头告知PHP接收JSON格式:

proxy: {
    type: 'ajax',
    batchActions: false,
    api: { /* 你的API地址保持不变 */ },
    // 新增请求方法配置,确保create/update使用POST
    actionMethods: {
        create: 'POST',
        update: 'POST',
        read: 'GET',
        destroy: 'POST'
    },
    headers: {
        'Content-Type': 'application/json' // 新增,告诉PHP接收JSON数据
    },
    reader: { /* 你的reader配置保持不变 */ },
    writer: {
        type: 'json',
        writeAllFields: true,
        encode: false, // 修改为false
        rootProperty: 'data',
        allowSingle: true
    }
}

PHP端接收示例:

$rawData = file_get_contents('php://input');
$data = json_decode($rawData, true);
$record = $data['data'];

3. 修正更新代码的错误

你更新模型的代码存在错误!form.set('field_1', value_1)是错误写法,应该给模型调用set方法,而不是表单。错误写法会导致模型未被标记为“脏数据”,store.sync()不会触发更新请求:

错误代码:

form.set('field_1', value_1);
form.set('field_2', value_2);

修正为:

model.set('field_1', value_1);
model.set('field_2', value_2);

另外,调用form.updateRecord(model)后,可以打印model.dirty查看是否为true,如果是false,说明要么字段没有变化,要么模型配置存在问题。

4. 删除冲突的batchUpdateMode配置

你设置了batchUpdateMode: 'complete',但同时开启了batchActions: false,这两个配置冲突。batchActions: false表示每条数据单独发送请求,batchUpdateMode完全无效,直接删除该行即可:

// 删除这行配置
batchUpdateMode: 'complete',

5. 用浏览器调试确认请求状态

按F12打开开发者工具,查看Network标签:

  • 如果没有发送请求:说明模型未被标记为脏数据,或者store未识别到新增/修改的记录
  • 如果发送了请求但PHP无输出:检查请求参数、Content-Type是否正确,同时开启PHP错误日志排查后端问题

内容的提问来源于stack exchange,提问作者Razgriz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 05:07:47