使用 Ajax 而不是 cUrl 执行 API 调用
perform an API call with Ajax instead of cUrl
我在我网站的同一个域上有一项服务 运行,它公开了一个 API。我已经成功地使用 cUrl 调用了 API,但我想将其移动到一些香草 js/jquery.
我的实际代码是:
$postData = array(
'userid' => $userid,
'password' => $password,
'email' => $userid
);
//creo utente base
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, 'https://admin:password@xxx.com/cloud/ocs/v1.php/cloud/users');
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($postData));
我试过这样一个简单的 ajax 请求:
$.ajax({
url: 'https://admin:password@xxx.com/cloud/ocs/v1.php/cloud/users',
method: 'post',
data: {userid:'a',password:'b',email:'c'},
dataType: 'json'
}).done(function(data){
//handle the results
});
或者这个:
$.ajax({
url: 'https://mydomain/cloud/ocs/v1.php/cloud/users',
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic "+btoa(admin:password));
},
method: 'post',
data: {userid:'mario@mari.com',password:'Annapurna1',email:'mario@mari.com'},
dataType: 'json'
}).done(function(data){
console.log(data);
});
但我收到“未授权”的 401 错误。这意味着 url 中提供的凭据无效。但是,如果我使用 Postman 使用相同的 url 发出 post 请求,它会通过授权。
我在这里错过了什么?
实际上我得到的错误完全是误导。
我通过添加 contentType: 'application/x-www-form-urlencoded',
来解决,该 contentType: 'application/x-www-form-urlencoded',
用于将参数发送到 API 模拟表单。
即使错误消息与错误的身份验证(用于登录的用户名和密码)相关,而不是与传递给 API.
的参数相关,添加它也解决了问题
所以我的最终代码是
$.ajax({
url: 'https://mydomain/cloud/ocs/v1.php/cloud/users',
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic "+btoa('admin:password'));
},
contentType: 'application/x-www-form-urlencoded',
method: 'post',
data: {userid:'john@gmail.com',password:'userpassword',email:'john@gmail.com'},
dataType: 'json'
}).done(function(data){
console.log(data);
});
我在我网站的同一个域上有一项服务 运行,它公开了一个 API。我已经成功地使用 cUrl 调用了 API,但我想将其移动到一些香草 js/jquery.
我的实际代码是:
$postData = array(
'userid' => $userid,
'password' => $password,
'email' => $userid
);
//creo utente base
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, 'https://admin:password@xxx.com/cloud/ocs/v1.php/cloud/users');
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($postData));
我试过这样一个简单的 ajax 请求:
$.ajax({
url: 'https://admin:password@xxx.com/cloud/ocs/v1.php/cloud/users',
method: 'post',
data: {userid:'a',password:'b',email:'c'},
dataType: 'json'
}).done(function(data){
//handle the results
});
或者这个:
$.ajax({
url: 'https://mydomain/cloud/ocs/v1.php/cloud/users',
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic "+btoa(admin:password));
},
method: 'post',
data: {userid:'mario@mari.com',password:'Annapurna1',email:'mario@mari.com'},
dataType: 'json'
}).done(function(data){
console.log(data);
});
但我收到“未授权”的 401 错误。这意味着 url 中提供的凭据无效。但是,如果我使用 Postman 使用相同的 url 发出 post 请求,它会通过授权。
我在这里错过了什么?
实际上我得到的错误完全是误导。
我通过添加 contentType: 'application/x-www-form-urlencoded',
来解决,该 contentType: 'application/x-www-form-urlencoded',
用于将参数发送到 API 模拟表单。
即使错误消息与错误的身份验证(用于登录的用户名和密码)相关,而不是与传递给 API.
所以我的最终代码是
$.ajax({
url: 'https://mydomain/cloud/ocs/v1.php/cloud/users',
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic "+btoa('admin:password'));
},
contentType: 'application/x-www-form-urlencoded',
method: 'post',
data: {userid:'john@gmail.com',password:'userpassword',email:'john@gmail.com'},
dataType: 'json'
}).done(function(data){
console.log(data);
});