Javascript 使用Ajax而不是cUrl执行API调用

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

我有一个服务在我网站的同一个域上运行,它公开了一个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',
来解决这个问题,它用于将参数发送到模拟表单的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变量?