Javascript JQuery赢得';调用drupal服务模块时,不能传递标记为sessiond的数据
嘿,我正在处理一个json调用,它将用json实现Drupal的服务模块。我使用jquery的ajax函数调用该函数,但收到一个错误,指出没有传递任何参数。当我查看正在发布的查询字符串时,我注意到sessiond没有被传递,即使它带有参数。下面是我正在运行的Javascript JQuery赢得';调用drupal服务模块时,不能传递标记为sessiond的数据,javascript,jquery,drupal,Javascript,Jquery,Drupal,嘿,我正在处理一个json调用,它将用json实现Drupal的服务模块。我使用jquery的ajax函数调用该函数,但收到一个错误,指出没有传递任何参数。当我查看正在发布的查询字符串时,我注意到sessiond没有被传递,即使它带有参数。下面是我正在运行的 // JavaScript Document $(document).ready(function() { function drupalConnect(src) { $.ajax({ ur
// JavaScript Document
$(document).ready(function() {
function drupalConnect(src) {
$.ajax({
url: src,
type: 'POST',
data: {
method: 'system.connect'
},
success: function(data) {
return data["result"]["sessid"];
}
});
}
function getTimestamp() {
return Math.round((new Date).getTime() / 1000);
}
function randString(length) {
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var randomstring = '';
for (var i = 0; i < length; i++) {
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum, rnum + 1);
}
return randomstring;
}
var session_id = drupalConnect('http://localhost/drupal/services/json-rpc');
var nonce = randString(10);
var timestamp = getTimestamp();
var username = "markusgray";
var password = "Markus1990";
var key = '2ae0392e0aebbfeeddefcc962ea1924f';
var domain = 'localhost';
var hashObj = new jsSHA(timestamp + ";" + domain + ";" + nonce + ";user.login", "TEXT");
var hash = hashObj.getHMAC(key, "TEXT", "SHA-256", "HEX");
var parameters = {
hash: hash,
domain_name: domain,
domain_time_stamp: timestamp,
nonce: nonce,
sessid: session_id,
username: username,
password: password
};
var par = JSON.stringify(parameters);
$.ajax({
url: 'http://localhost/drupal/services/json-rpc',
type: 'POST',
dataType: 'json',
data: {
method: 'user.login',
params: par
},
success: function() {
}
});
});
//JavaScript文档
$(文档).ready(函数(){
功能连接(src){
$.ajax({
网址:src,
键入:“POST”,
数据:{
方法:“system.connect”
},
成功:功能(数据){
返回数据[“结果”][“会话”];
}
});
}
函数getTimestamp(){
返回Math.round((新日期).getTime()/1000);
}
函数字符串(长度){
var chars=“0123456789abcdefghijklmnopqrstuvwxtzabcdfghiklmnopqrstuvwxyz”;
var randomstring='';
对于(变量i=0;i
drupalConnect
不会返回任何内容,而且从success
回调返回的内容也会被丢弃。使用ajax调用返回的数据的最佳方法是在回调本身中使用它
function drupalConnect(src){
$.ajax({
url: src,
type: 'POST',
data:{method:'system.connect'},
success: function(data){
var session_id = data["result"]["sessid"];
//use session_id here
}
});
}
这是因为
异步
ajax,让我详细说明一下,为了获得会话id
您正在进行ajax调用。此时它将发送请求,但无法确保此时会分配会话id
。因此,当您进行第二次ajax调用时,会话id
可能不会被分配值
有两种解决方法
一种是,使用一个选项async:false
进行第一个ajax调用,并在成功调用中分配值,如
var session_id;
function drupalConnect(src) {
$.ajax({
url: src,
type: 'post',
async : false,
data: {
method: 'system.connect'
},
success: function(data) {
session_id = data["result"]["sessid"];
}
});
};
$.when(
// make your first ajax request
).then(function(data) {
session_id = data["result"]["sessid"];
// make your second ajax call
});
第二种也是首选的方法是,使用
var session_id;
function drupalConnect(src) {
$.ajax({
url: src,
type: 'post',
async : false,
data: {
method: 'system.connect'
},
success: function(data) {
session_id = data["result"]["sessid"];
}
});
};
$.when(
// make your first ajax request
).then(function(data) {
session_id = data["result"]["sessid"];
// make your second ajax call
});