0

如果客户端名称是您正在使用的服务器端语言中的关键字或保留字,您如何解决名称不匹配问题?

DOJO JavaScript 工具包有一个 QueryReadStore 类,您可以将其子类化以向服务器提交 REST 模式查询。我将它与 FilteringSelect Dijit 结合使用。

我可以继承 QueryReadStore 并指定传递给服务器的参数和参数。但在此过程中,“start”和“count”参数正在从客户端传递到服务器。我进入 API 并发现 QueryReadStore.js 正在发送这些参数名称。

我正在使用 Fiddler 来确认实际发送和带回的内容。服务器响应告诉我,由于“start”和“count”参数,我的参数名称不匹配。问题是,我不能在 PL/SQL 中使用“start”和“count”。

解决方法或正确的实施建议将不胜感激...谢谢。

//我试着把代码片段放在这里,但由于它主要是 HTML,所以效果不太好。

4

3 回答 3

1

虽然感觉做错了事,因为我正在破解一个经过良好测试、编写良好的 JavaScript 工具包,但这就是我解决问题的方法:

我进入 DOJOX QueryReadStore.js 并将“开始”和“计数”引用替换为可接受的(对于服务器端语言)参数名称。

我想通过我的 PL/SQL (但我不知道如何绕过保留字)或客户端代码(子类化并没有解决问题)来处理这个问题......而无需进入图书馆。但它有效,我可以继续前进。

于 2008-10-10T20:39:43.223 回答
0

正如您所提到的,与从 API 中删除它相反,您实际上可以使用自己的 fetch 创建一个子类,并删除 start/count 参数(理论上)。查看此 URL 以获取指导:

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

start 和 count 实际上非常有用,因为它们允许您为查询传递参数,可用于过滤大量数据集,并且有助于管理客户端分页。我会尝试子类化,拦截和删除。

于 2008-10-11T13:38:33.167 回答
0

您的 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
于 2009-01-17T00:26:47.123 回答