Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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-API请求(访问控制允许源错误)_Javascript_Php_Json_Api_Fetch - Fatal编程技术网

JavaScript-API请求(访问控制允许源错误)

JavaScript-API请求(访问控制允许源错误),javascript,php,json,api,fetch,Javascript,Php,Json,Api,Fetch,负责API请求的人已经离开了一周,所以在服务器端什么也做不了 fetch("https://url.com/api/login/", { method: "post", headers: { // 'Accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded' }, body: JSON.stringify({ use

负责API请求的人已经离开了一周,所以在服务器端什么也做不了

fetch("https://url.com/api/login/", {
    method: "post",
    headers: {
        // 'Accept': 'application/json',
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: JSON.stringify({
        username: "test@mail.com",
        password: "123"
    })
}).then(function (response) {
    return response.json();
}).then(function (myJson) {
    console.log(myJson);
});
它适用于Postman,但正如我所听说的,Postman不遵循与浏览器相同的安全性,因此这不是Postman的问题。但我怀疑情况是否如此,因为作者的php解决方案运行良好

这是一个有效的php解决方案示例(由他编写):

我的代码中缺少什么?我怎样才能使它像他的php解决方案一样工作。(没有php方面的经验)

非常感谢您的帮助

编辑:

对邮递员起作用的是:

  • 正文中的原始json格式
  • x-www-form-urlencoded

要解决此错误,您可以做三件事:

  • 添加您的源服务器端
  • 在同一个域上运行javascript
  • 检查在chrome中禁用同源策略的答案。这将允许您测试代码,直到负责de API的人员返回

  • 感谢您的回复,我将很快检查这些选项。顺便说一句,我的解决方案是否正确,这意味着这是服务器端问题/或者必须在同一个域上?浏览器会阻止请求,因为API的域与javascript运行的域不同。在服务器上添加允许原点行时。服务器告诉浏览器(在响应头中)允许您的javascript域。是的,这是服务器端。
        function login($username, $password) {
            $curl = curl_init(); curl_setopt_array($curl, array(
                CURLOPT_URL => "https://url.com/api/login/",
                CURLOPT_POST => true,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_FOLLOWLOCATION => false,
                CURLOPT_TIMEOUT => 30,
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_POSTFIELDS => "username=".$username."&password=".$password,
                CURLOPT_HTTPHEADER => array(
                    "cache-control: no-cache",
                    "content-type: application/x-www-form-urlencoded"),
            ));
    
            $response = curl_exec($curl);
            curl_close($curl);
            $authdata = json_decode($response);
            if ($authdata -> success) {
                //success
                return true;
            } else {
                //fail
                return false;
            }
        }