Javascript 使用Ajax而不是cUrl执行API调用
我有一个服务在我网站的同一个域上运行,它公开了一个API。我已经设法使用cUrl调用了API,但我想将它转移到一些普通的js/jquery中 我的实际代码是:Javascript 使用Ajax而不是cUrl执行API调用,javascript,jquery,ajax,curl,owncloud,Javascript,Jquery,Ajax,Curl,Owncloud,我有一个服务在我网站的同一个域上运行,它公开了一个API。我已经设法使用cUrl调用了API,但我想将它转移到一些普通的js/jquery中 我的实际代码是: $postData = array( 'userid' => $userid, 'password' => $password, 'email' => $userid ); //creo utente base $ch = curl_init(); curl_setopt($ch,CURLOP
$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',
来解决这个问题,它用于将参数发送到模拟表单的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);
});
如果它是通过postman工作的,您可以使用postman的代码生成器直接为其生成js代码:您敢肯定您的类型上的一切都正常吗?(字符串VS int)@SingleBatteur代码中没有拼写错误。@SamridhTuladhar邮递员将以我相同的代码结束。无论如何,问题在于url,而jquery是如何将其发布到ajax请求syntax401中的,这是一条非常清楚的消息。使用postman时,您是使用基本授权还是仅发布登录凭据,因为代码中不清楚?在第二次尝试中,当您尝试基本授权时,在哪里定义了admin和password变量?