Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMLHttpRequest服务器响应状态为405(不允许使用方法)_Javascript_Couchbase - Fatal编程技术网

Javascript XMLHttpRequest服务器响应状态为405(不允许使用方法)

Javascript XMLHttpRequest服务器响应状态为405(不允许使用方法),javascript,couchbase,Javascript,Couchbase,我使用这个HTTP POST请求代码将json数据发送到Couchbase bucket/document。我不知道它抛出错误的确切原因,因为“XMLHttpRequest发送加载资源失败:服务器响应状态为405(不允许使用方法)” 当我测试这个时,它通过Postman运行良好 var params = { "EmpID":"567453", "EmpAddress": "XX", "EmpAccount": "89723", "EmpName": "user19

我使用这个HTTP POST请求代码将json数据发送到Couchbase bucket/document。我不知道它抛出错误的确切原因,因为
“XMLHttpRequest发送加载资源失败:服务器响应状态为405(不允许使用方法)”

当我测试这个时,它通过
Postman
运行良好

var params = {
    "EmpID":"567453",
    "EmpAddress": "XX",
    "EmpAccount": "89723",
    "EmpName": "user1953977",
    "EmpType": "DEV"
}
var xhr = new XMLHttpRequest();
var url = "http://xxxx:PORT/xxxx/xxx/xxx/docs/docs/firstdoc/"; // Couchbase document url
xhr.open("POST", url, true);

xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("Accept", "application/json" );
xhr.setRequestHeader("Authorization", "Basic XXXXXXXXXXXXXXXXXX");
xhr.setRequestHeader("Cache-Control", "no-cache");

var data = JSON.stringify(params);
xhr.send(data)

有人能告诉我问题出在哪里吗?有没有办法解决这个问题?

我很确定,您所做的是从浏览器向Couchbase服务器发出POST请求。您得到的405错误可能是由于CORS。CORS不能在Couchbase服务器中关闭(我想,除非您自己分叉并编译)。Couchbase服务器的设计不允许像这样直接从浏览器访问

一些选择:

  • Couchbase服务器位于API后面,您可以使用自己选择的SDK(节点、Java、.NET等)与Couchbase进行交互

  • 使用Couchbase前面的同步网关,Couchbase有一个允许您启用CORS的API(请参阅)

  • 在浏览器()中关闭同源策略,但这通常不适用于大多数应用程序,因为您需要每个用户都关闭CORS


  • 在使用Postman而不是运行客户端代码时,是否有可能正确验证了您的身份?无论我通过Postman使用的是“授权”、“接受”、“内容类型”,我在这里使用的都是相同的。我认为这不是问题所在。您是向Couchbase服务器还是同步网关发出这些请求?这些请求是否来自浏览器?这很好。另外一个问题是,当我以编程方式发送这种JSON数据时,它在couchbase文档中以“Binary Document,base64 not available”的形式接收,而不是接收正确的JSON数据。从技术上讲,您使用的端点不是公共API的一部分。它不受支持,没有相关文档。也就是说,你可能想看看我的答案:你好,Matthew,我不知道为什么它不能通过代码工作?这只是剩下的电话,因为它和邮递员配合得很好。我所需要的是,它正在向CB发送信息,但像这样的“二进制文档,base64不可用”。通过代码发送正确的JSON是可能的还是根本不可能?我现在正在测试它,而不是最终的代码。最后,我打算只使用SDK。这个问题问的是完全相同的问题,我的答案正好解决了这个问题。您需要将JSON文档作为表单编码的值传递到名为“value”的字段中。您没有在JavaScript中这样做(因为CORS,JavaScript无论如何都不会工作),我只能假设您也没有在Postman中这样做。我必须再次强调,这个API是不受支持的,它可能会随着版本的不同而改变/中断/消失。