使用AJAX发送PUT请求时出错

时间:2017-09-25 14:01:44

标签: jquery ajax xml cors put

我已经编写了HTML和AJAX代码来更新网络中的摄像头密码。 当我提交表格时,我只得到

  

"错误" (net :: ERR_EMPTY_RESPONSE)

在Chrome中

并且它不会更新密码。但是当我用POSTMAN尝试PUT请求时,我得到OK(200)并且它成功更新。它也适用于Locale(即从桌面运行HTML文件)和Internet Explorer。但在上传到服务器后,它无法与Internet Explorer一起使用(待处理和拒绝访问)。

function myFunction() {
    var settings = {
        "async": true,
        "crossDomain": true,
        "url": "http://192.168.1.64/Security/users?auth=YWRtaW46MTEK",
        "method": "PUT",
        "headers": {
            "cache-control": "no-cache",
            "postman-token": "fda97359-6164-70d0-2896-8ca4804ac06c"
        },
        "data": "<UserList xmlns=\"http://www.hikvision.com/ver10/XMLSchema\" version=\"1.0\"><User xmlns=\"http://www.hikvision.com/ver10/XMLSchema\" version=\"1.0\"><id>1</id><userName>admin</userName><password>TT.123456</password></User></UserList>"
    }

    $.ajax(settings).done(function (response) {
        console.log(response);
    });
}

我在chrome中遇到此错误。请看屏幕截图:

chrome

&#34;邮差&#34;屏幕截图:

postman

1 个答案:

答案 0 :(得分:0)

为了执行跨域请求(在客户端),它很可能需要是POST请求而不是PUT。根据{{​​3}}的MDN文档:

  

简单请求

     

有些请求不会触发HTTP access control (CORS)。这些在本文中称为“简单请求”,尽管CORS preflight规范(定义CORS)不使用该术语。不触发Fetch的请求 - 所谓的“简单请求” - 符合以下所有条件的请求:

     

POST

我在本地发布了您的帖子中的代码,将方法更改为1。端点需要添加以下标头:

access-control-allow-headers: cache-control,postman-token
access-control-allow-origin: *

虽然可以将POST设置为特定域而不是*。例如:

Access-Control-Allow-Origin: https://intranetHost

在下图中,第一个XHR请求是飞行前请求(其中方法为OPTIONS),第二个是实际请求(方法为POST

Access-Control-Allow-Origin

或者,如果它仍然需要是PUT请求,则可能会向将发出PUT请求的服务器端端点发出请求(例如,使用cURL)。

1 <子> enter image description here