3

我在 JavaScript 中使用 REST API。当我多次请求 REST API 时,它返回(响应)无效会话 id,但我提供了一个有效的会话 id,因为我已使用此会话 id 提取数据。
有人遇到过这个问题吗?

function sugarLogin(url, user, password) {
var request = new XMLHttpRequest();
var params = {
    user_auth: {
        user_name: user,
        password: password
    },
    name_value_list: [{
        name: 'notifyonsave',
        value: 'true'
    }]
};
var json = $.toJSON(params);
var crm_api = url;
request.open("POST", crm_api, true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.onreadystatechange = function () {
    if (request.readyState == 4 && request.status == 200) {
        var response = request.responseText;
        var response_obj = jQuery.parseJSON(response);

        if (response_obj) {
            if (response_obj.name && response_obj.name == "Invalid Login") {
                //invalid login
                ProcessingFlag = 3;
            } else {
                session_id = response_obj.id;
                ProcessingFlag = 1;
            }
        }
    } else if (request.readyState == 4 && request.status == 404) {
        ProcessingFlag = 2;
    }
}
request.send("method=login&input_type=JSON&response_type=JSON&rest_data=" + json);}

我已经使用上面的代码来login设置session_id(全局范围),然后使用这个会话 ID 我正在调用search_by_moduleREST API 的函数。它工作正常,但如果频繁发出多个请求,则会显示会话 ID 无效。

尽管我在拨打电话login之前尝试再次调用函数search_by_module。主要问题是当我在响应返回search_by_module并呈现 HTML 后尝试调用其他 REST 函数时,它说我的会话无效。我不知道为什么会话会立即过期,而我们知道服务器上的会话会在 24 分钟后过期(我们的糖实例托管的服务器)

4

1 回答 1

2

我敢打赌,由于第 3 项,您会得到这个:

1/ 定义了一个错误回调,用于检查特定响应 - 无效登录 - 并调用登录函数。阅读您的代码,我想这是ProcessingFlag = 3;工作。

2/ 确保登录函数正确且全局地更新 session_id,以便将来的函数调用将获得正确的值。

3/ 确保你将新的 session_id 作为FIRST参数传递给你所有的 rest_data 中的所有后续调用。我被抓住了,浪费了好几个小时才发现 SugarCRMDOESN'T支持其 rest_data 中的命名参数(它是否实现了函数参数方面的糟糕?)这是因为我将 session_id 添加为最后一个参数,而我所有的 REST 调用都是返回无效的 ID。

于 2012-12-02T09:13:29.213 回答