Ionic + Angular POST请求返回状态404

red*_*rom 16 javascript ajax curl angularjs

我刚刚更新了Angular + Ionic上的新版本以及处理远程请求停止工作的方法,并始终返回404响应.

请求如下:

Request Method:POST
Status Code:404 Not Found (from cache)
Request Headersview source
Accept:application/json, text/plain, */*
Content-Type:text/plain
Origin:file://
User-Agent:Mozilla/5.0 (Linux; Android 4.4.2; Lenovo Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36
Request Payloadview source
{,…}
Run Code Online (Sandbox Code Playgroud)

处理远程请求的方法的代码如下:

    // set transfer credentials
                $http({
                    method : 'POST',
                    url : $scope.remoteUrl,
                    data: {img_base64: "/9j/4AAQSkZ"},
                    headers: 'application/json',
                    timeout: 10000
                    // success response
                }).success(function(data, status, headers, config) {
                    //SUCESSS
                    } else {
                    //PROCESSING ERROR                     
}

                    // error response
                }).error(function(data, status, headers, config) {
                    // ERROR
                });
Run Code Online (Sandbox Code Playgroud)

我尝试使用此主题解决它:

AngularJs $ http.post()不发送数据

Angular + Ionic Post请求未找到404

但没有运气.

服务器端通过这种方式处理请求:

$inputJSON = file_get_contents('php://input');
    $input= json_decode( $inputJSON, TRUE ); //convert JSON into array
Run Code Online (Sandbox Code Playgroud)

如果我试图使用Postman或Curl发送请求,似乎一切正常.

离子信息:

Node Version: v0.12.2
Cordova CLI: 5.0.0
Ionic CLI Version: 1.3.22
Xcode version: Xcode 6.3.1 Build version 6D1002 
ios-sim version: Not installed
ios-deploy version: Not installed
Run Code Online (Sandbox Code Playgroud)

AngularJS版本:

"version": "1.3.13",
Run Code Online (Sandbox Code Playgroud)

我该怎么解决呢?

非常感谢任何建议

Tie*_*une 41

嗯,我刚遇到同样的问题:标题表明它已被取出from cache......但实际上,它似乎与新版本的Cordova中的新安全策略有关.

这是我解决它的方式:

我安装了Cordova的白名单插件:

cordova plugin add cordova-plugin-whitelist
Run Code Online (Sandbox Code Playgroud)

然后,将您的内容政策index.html作为元标记添加(使用您自己的主机或'*'接受所有请求):

<meta http-equiv="Content-Security-Policy" content="default-src 'self' yourhost.com ws://localhost:35729 data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *;script-src 'self' localhost:35729 'unsafe-eval' 'unsafe-inline';">
Run Code Online (Sandbox Code Playgroud)

default-src用于一般要求; 该ws://localhost:35729主机被用于活重装ionic serve.

script-src 用于安全脚本执行

unsafe-inline并且unsafe-eval是为了使角度正常工作所必需的.

data: gap: https://ssl.gstatic.com 仅用于iOS.

self表示index.html文件的当前主机.

您必须添加自己的,以便您的请求正常工作.如果它们是非标准的,请不要忘记添加协议和端口

如果您不想要它,可以跳过元标记,但是您会从白名单插件中收到很多警告.

有关如何在插件的自述文件中配置它的更多信息.

然后重建你的应用程序,它应该再次工作.


小智 5

我也有这个问题,并搜索了很多,然后终于...我删除了白名单插件:

cordova plugin remove cordova-plugin-whitelist
Run Code Online (Sandbox Code Playgroud)

然后安装它

cordova plugin add cordova-plugin-whitelist
Run Code Online (Sandbox Code Playgroud)

它帮助了我,希望它能解决你的问题