Extjs 4.2创建"post"编辑时请求,而不是“放”


extjs 4.2 creating "post" request while editing instead of "put"

我正在extjs 4.2应用程序与php mysql后端工作。我能够通过表单添加记录来存储。然后使用代理存储自动同步,将新记录添加到mysql。但是,它不会创建一个"put"请求,而是创建一个"post"请求。我看过关于相同问题的其他示例,其中大多数指向配置模型的idProperty。

我的前端使用一个表单来创建新的/POST或编辑现有的/PUT取决于是否存在唯一的模型ID

store使用ajax代理

        Save controller:
var form = this.getAnnDetailsPanel1().getForm();
var formData = form.getFieldValues();
//console.log(formData);
var a = form.findField('annID');
var b = a.getValue();
//console.log(b);
if(!b)
{
//console.log("record doesnt exist - Add Record");
var store = Ext.data.StoreManager.get('announcementStore');
var sss = store.add(formData);
}
else
{
console.log("record exist - Edit Record");
var ttt = form.getRecord();
uuu = form.updateRecord(ttt);
ttt.commit();
console.log(ttt);
}
php文件:

        <?php
header('Content-Type: application/json');
$method = $_SERVER["REQUEST_METHOD"];
$con = new PDO("mysql:host=localhost;dbname=openclass", "root", "")  or die("cannot connect to mysql");
switch ($method) {
    case "GET":     // Return all records
        $ClassID = $_GET["ClassID"];
        $sql =  "SELECT * FROM announcement " .
                "WHERE ClassID = $ClassID " .
                "ORDER BY annID";
        $sql = $con->prepare($sql);
        $sql->execute();
        $rows = array();
        while ($row = $sql->fetch(PDO::FETCH_OBJ)) {
            $rows['data'][] = $row;
        }
        echo json_encode($rows, JSON_NUMERIC_CHECK);
        break;
    case "PUT":     // Update existing record, requires ID
        $postData = getPostData();
        $annID = getPostValue($postData, 'annID');
        $ClassID = getPostValue($postData, 'ClassID');
        $annHeading = getPostValue($postData, 'annHeading');
        $annContent = getPostValue($postData, 'annContent');
        $sql =  "UPDATE announcement " .
                "SET ClassID = '$ClassID' " .
                " annHeading = '$annHeading' " .
                " annContent = '$annContent' " .
                "WHERE annID = '$annID' ";
        $sql = $con->prepare($sql);
        $result = $sql->execute();
        break;
    case "POST":    // New record
        $postData = getPostData();
        $ClassID = getPostValue($postData, 'ClassID');
        $annHeading = getPostValue($postData, 'annHeading');
        $annContent = getPostValue($postData, 'annContent');
        $sql =  "INSERT INTO announcement (ClassID, annHeading, annContent) " .
                "VALUES ('$ClassID','$annHeading', '$annContent')";
        $sql = $con->prepare($sql);
        $result = $sql->execute();

        break;
    case "DELETE":  // Delete existing record, requires annID
        $postData = getPostData();
        $annID = getPostValue($postData, 'annID');
        $sql =  "DELETE FROM announcement " .
                "WHERE annID = '$annID' ";
        $sql = $con->prepare($sql);
        $result = $sql->execute();
        if (! $result) {
            echo "{'"success'": false}";
        } else {
            echo "{'"annID'": $annID}";
        }
        break;
}
$con = null;
function getPostData() {
    $fileContents = file_get_contents("php://input");
    return json_decode($fileContents, true);
}
function getPostValue($postData, $fieldName) {
    return (!empty($postData[$fieldName]) ? htmlspecialchars($postData[$fieldName]) : NULL);
}
?>

如果您打算继续使用Ajax代理,您可以调整actionMethods属性来指定应该使用哪些HTTP谓词来创建、更新等。

http://docs.sencha.com/extjs/4.2.2/# !/api/Ext.data.proxy.Ajax-property-actionMethods

或者(可能更好),您可以使用Rest代理让Ext JS自动分配动词并生成适当的url。

http://docs.sencha.com/extjs/4.2.2/# !/api/Ext.data.proxy.Rest