我在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,我将调用REST API的
search_by_module
函数。它工作正常,但是如果频繁发出多个请求,则会显示无效的会话ID。
尽管我尝试在调用
login
之前再次调用search_by_module
函数。主要问题是当我尝试从
search_by_module
返回响应并呈现HTML之后尝试调用其他REST函数时,它说我的会话无效。我无法弄清楚会话为何立即过期,尽管我们知道服务器会话在24分钟后过期(托管了我们的Sugar实例的服务器) 最佳答案
我敢打赌,由于物品编号3,您会收到此消息:
1 /定义了一个错误回调,用于检查特定的响应-无效的登录名-并调用登录函数。阅读您的代码,我想这是ProcessingFlag = 3;
工作。
2 /确保登录函数正确且全局地更新了session_id,以便将来的函数调用将获得正确的值。
3 /确保在所有rest_data中,将该新的session_id作为FIRST
参数传递给所有后续调用。我陷入了困境,并浪费了很多时间才发现SugarCRM DOESN'T
在其rest_data中支持命名参数(是否在功能参数论上实现不佳?),因为这是因为我将session_id作为最后一个参数以及所有REST调用返回无效的ID。