使用 PrestaShop 更新 (PUT) 一个 JSON 对象

Update (PUT) a JSON object with PrestaShop

本文关键字:一个 JSON 对象 PUT PrestaShop 更新 使用      更新时间:2023-09-26

我正在尝试更新JSON对象(例如:客户)。但是,我有以下错误:

"网络错误:不允许 405 方法 - http://prestashop/api/..."

这是我的代码(索引.js):

var testWebService = angular.module('testWebService', []);
testWebService.controller('testWebServiceCtrl', function ($scope, $http) {
    var $baseDir = "http://prestashop/api";
    var $objectDir = "customers";
    var $idObjectDir = "1";
    var $keyDir = "F517VWPRREG7TA25DEY8UIZT8V79E5OV";
    var $urlDir = $baseDir + "/" + $objectDir + "/" + $idObjectDir + "?ws_key=" + $keyDir + "&output_format=JSON";
    // TEST DE LA METHODE PUT SUR L ID D UN CUSTOMER
    $.ajax({
        type: "PUT",
        url: $urlDir,
        dataType: "json",
        async: false,
        contentType: "application/json; charset=utf-8",
        data: {"id": "93"},
        crossDomain: true,
        success: function () { 
            console.log("Ok PUT");
        },
        error: function() {
            console.log("Erreur PUT");
        }
    });
});

之前,我尝试获取对象的 id(相同:客户),并且我用几乎类似的方法成功了。我准确地说,我在高级设置/网络服务中授予了有关"客户"的权利(对于方法GET,PUT,POST...

提前感谢您的帮助,我尝试了很多事情,但成功了。

PS:如果您对我的代码有任何"清理"它的建议,您会很高兴。

我的网络服务 JSON:

{"customer":{"id":1,"id_default_group":"3","id_lang":"1","newsletter_date_add":"2013-12-13 08:19:15","ip_registration_newsletter":"","last_passwd_gen":"2015-06-08 03:38:27","secure_key":"7036cdf99ea12125ad1b3789f298f686","deleted":"0","passwd":"2e372235eb5213bc004ce72bcfef16a2","lastname":"DOE","firstname":"John","email":"pub@prestashop.com","id_gender":"1","birthday":"1970-01-15","newsletter":"1","optin":"1","website":"","company":"","siret":"","ape":"","outstanding_allow_amount":"0.000000","show_public_prices":"0","id_risk":"0","max_payment_days":"0","active":"1","note":"","is_guest":"0","id_shop":"1","id_shop_group":"1","date_add":"2015-06-08 09:38:27","date_upd":"2015-06-08 09:38:27","associations":{"groups":[{"id":"3"}]}}}

编辑:当我尝试使用GET方法时,我做到了:

$.ajax({
    type: "GET",
    url: $urlDir,
    dataType: "json",
    async: false,
    success: function (data) { 
        $scope.customer1 = data;
        console.log("Ok GET");
        console.log(data);
    },
    error: function() {
        console.log("Erreur GET");
    }
});

读取 http 协议的状态代码定义,尝试将以下属性添加到 ajax 请求中:

$.ajax({
    type: "PUT",
    ...
    beforeSend: function (xhr) {
        xhr.setRequestHeader("Allow", "GET, HEAD, PUT, DELETE");
    },
    ...
});

PS:如果您的服务器上禁用了 CORS,请查看此答案并设置标头以允许您的服务器访问来自不同来源的请求。