web-dev-qa-db-ja.com

サービスでチェックボックスを更新できません

ユーザーアカウントのチェックボックスを更新してチェックを外すと、いくつかの構成を試しましたが、成功しませんでした。問題なく確認できました。

updateCharType = function (token) {

    var obj = {
        "uid": "1",
        "name": "admin",
        "field_character_type": {"und": [{"value": 0}]}
    };
    return $.ajax({
        url: 'www.example.com/endpoint/1.json',
        crossDomain: true,
        type: 'PUT',
        data: obj,
        dataType: 'json',
        headers: {
            'X-CSRF-Token': token
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            console.log('user edit - failed to edit ' + textStatus);
            console.log(errorThrown);
        },
        success: function (data) {
            alert(success!);
        }
    });
}

これで、常にコードの成功部分に到達し、正常に動作しているようにseemsになります。

ただし、チェックボックスがオフになることはありません。私はたくさんのドキュメントを読み、JSONを形成する方法を何百万回も試してみました-nullを入れ、[]を削除し、undを削除しました-何らかの理由で、このチェックボックスを更新する運がまったくありません!

サービスのあるユーザーアカウントのチェックボックスを更新するにはどうすればよいですか?

編集:

私はそれを別のフィールドの値のリストで機能させることができました:

 var fontSize = jQuery('#font-size').val();

    var obj = {
        "uid": "1",
        "name": "admin",
        "field_font_size": {"und": fontSize}
    };
    return $.ajax({
        url: 'http://example.com' + "/users/user/1.json",
        crossDomain: true,
        type: 'PUT',
        data: obj,
        dataType: 'application/json',
        headers: {
            'X-CSRF-Token': token
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            console.log('user edit - failed to edit ' + textStatus);
            console.log(errorThrown);
        },
        success: function (data) {
            alert("Success for user save!:) ");
        }
    });
};

違い:

値のリストになる方法、そしてそれをapplication/jsonに設定する必要がありました

ブールフィールドはまだどのようなバリエーションでも機能しません。

また、チェックボックスをオフにしようとすると、次のエラーが発生します。

Notice: Array to string conversion in DatabaseStatementBase->execute() (line 2227 of /Users/username/Desktop/Projects/example.com/includes/database/database.inc).
3
Jack Ryan

Drupal 7(別名ブールフィールドでfalseを設定))のサービスでチェックボックスをオフにするには、次のようにしてください。

"field_character_type": {"und": null}

これが私のローカルホスト(ユーザーとノードの両方)で機能することを確認しました。これが[〜#〜] put [〜#〜]のペイロードです。

{
  uid: 1,
  name: "admin",
  field_character_type: { und: null }
}

そしてここにパスがあります:

api/user/1.json

必ず[my-endpoint-path]/user/[uid].jsonを呼び出しに含めてください。

データペイロードを文字列にキャストする必要があるのは、Vanilla .jsとxhrオブジェクトを使用している場合のみです。それ以外の場合は、jQueryのajaxが自動的に行います。

2

最終的に、通過する値は常に空の文字列であり、私が直接nullに設定しても、nullになることはありません。

私の問題の解決策はこれでした:

function MY_MODULE_services_request_preprocess_alter($controller, &$args, $options) {
  if(!is_null($args[1]['field_character_type']) && $args[1]['field_character_type']['und'] == "") {
      $args[1]['field_character_type']['und'] = null;
  }
}

それはこのJSONオブジェクトをサーバーに送信することでした:

    var obj = {
        field_character_type: { und: null }
    };

そしてサービスは呼び出す:

    return $.ajax({
        url: 'http://example.com' + "/users/user/1.json",
        crossDomain: true,
        type: 'PUT',
        data: obj,
        dataType: 'json',
        headers: {
            'X-CSRF-Token': token
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            console.log('user edit - failed to edit ' + textStatus);
            console.log(errorThrown);
        },
        success: function (data) {
            //alert("Success for user save!:) ");
        }
    });
};
0
Jack Ryan