Как исправить несоответствие имен параметров - DOJO и PL / SQL

Как решить проблему несоответствия имен, если имена на стороне клиента являются ключевыми словами или зарезервированными словами на языке серверной части, который вы используете?

В наборе инструментов DOJO JavaScript есть класс QueryReadStore, который можно создать подклассом для отправки шаблонных запросов REST на сервер. Я использую это вместе с FilteringSelect Dijit.

Я могу создать подкласс QueryReadStore и указать параметры и аргументы, передаваемые на сервер. Но где-то по пути от клиента к серверу передаются параметры «start» и «count». Я вошел в API и обнаружил, что QueryReadStore.js отправляет эти имена параметров.

Я использую Fiddler, чтобы подтвердить, что на самом деле отправляется и возвращается. Ответ сервера сообщает мне, что у меня несоответствие имен параметров из-за параметров "start" и "count". Проблема в том, что я не могу использовать «начало» и «счет» в PL / SQL.

Обходной путь или совет по правильной реализации были бы признательны ... спасибо.

// Я попытался вставить сюда фрагмент кода, но, поскольку это в основном HTML, это не сработало.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
703
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Хотя это кажется неправильным поступком, потому что я взламываю хорошо протестированный, хорошо написанный инструментарий JavaScript, вот как я решил проблему:

Я вошел в DOJOX QueryReadStore.js и заменены - ссылки "start" и "count" с приемлемыми (для серверного языка) именами параметров.

Я хотел бы решить эту проблему с помощью моего PL / SQL (но я не знаю, как обойти зарезервированные слова) или клиентского кода (подклассы не помогли) ..., не углубляясь во внутренности библиотеки. Но это работает, и я могу двигаться дальше.

В отличие от удаления его из API, как вы упомянули, вы можете создать подкласс со своей собственной выборкой и удалить параметры start / count (теоретически). Взгляните на этот URL-адрес для руководства:

http://www.sitepen.com/blog/2008/06/25/web-service-data-store/

Start и count на самом деле очень полезны, потому что они позволяют вам передавать параметры для запроса, которые вы можете использовать для фильтрации массивных наборов данных, и это помогает управлять подкачкой на стороне клиента. Вместо этого я бы попытался создать подкласс, перехватить и удалить.

Доступ к вашей программе pl / sql осуществляется через URL-адрес и mod_plsql? Если это так, то вы можете использовать «гибкую передачу параметров», и переменные будут присвоены массиву пар имя / значение.

Определите спецификацию вашего пакета следующим образом ...

create or replace package pkg_name
    TYPE plsqltable
   IS
      TABLE OF VARCHAR2 (32000)
         INDEX BY BINARY_INTEGER;

   empty   plsqltable;
 PROCEDURE api (name_array IN plsqltable DEFAULT empty ,
                         value_array IN plsqltable DEFAULT empty
   );
END pkg_name;

Затем тело:

    CREATE OR REPLACE PACKAGE BODY pkg_name AS
    l_count_value number;
    l_start_value number;
    PROCEDURE proc_name (name_array IN plsqltable DEFAULT empty,
                   value_array IN plsqltable DEFAULT empty) is
    ------------
    FUNCTION get_value (p_name IN VARCHAR) RETURN VARCHAR2 IS 
    BEGIN
    FOR i IN 1..name_array.COUNT LOOP
        IF UPPER(name_array(i)) = UPPER(p_name) THEN
           RETURN value_array(i);
        END IF;
    END LOOP;
    RETURN NULL;
    END get_value;
    ----------------------
    begin
    l_count_value := get_value('count');
    l_start_value := get_value('start');
    end api;
    end pkg_name;

Затем вы можете вызвать pkg_name.api, используя

http://server/dad/!pkg_name.api?start=3&count=3

Другие вопросы по теме