【发布时间】:2013-03-20 09:38:26
【问题描述】:
我是新手,我想使用 Angular.js 发出 HTTP POST 请求。我正在访问具有只是 POST 变量的参数的 PHP 脚本。每个脚本返回的是一个 JSON 字符串。通常在 HTML 表单中,您可以发出如下请求:
<form method="post" action="url.php">
<input name="this">
<input name="that">
<input value="Submit">
</form>
根据您的输入,点击提交后,JSON data1 将返回如下内容:{ "code" : 1 }
我无权访问脚本或托管它们的服务器。
我想知道 Angular.js 是否可以读取 JSON 数据 1,将该数据 1 与我的 JSON 数据 2 中定义的内容相匹配,然后将它们输出到我的视图 (<pre>data2</pre>)。
例如,如果检索到{ "code" : 1 },我希望我的 JSON 输出代码 #1 的值:
{ "code" : [
{ 1: "User already logged in." },
{ 2: "Wrong parameters, try again."},
{ 3: "etc., etc." }
]
};
这是我的尝试:
<form ng-controller="PhpCtrl" name="f1">
<input type="text" name="name">
<input type="text" name="password">
<pre ng-model="codeStatus">{{codeStatus}}</pre>
<input type="submit" ng-click="add()" value="Submit">
</form>
function PhpCtrl($scope, $http, $templateCache) {
$scope.method = 'POST';
$scope.url = 'url.php';
$scope.codeStatus = "";
$scope.add = function() {
$http({
method: $scope.method,
url: $scope.url,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
cache: $templateCache
}).
success(function(response) {
$scope.codeStatus = response.data;
}).
error(function(response) {
$scope.codeStatus = response || "Request failed";
});
return false;
};
}
到目前为止,它发布到视图的所有内容都是“请求失败”,哈哈,虽然它正在处理 HTTP/1.1 200。我知道我还有很长的路要走,但我会很感激任何帮助。一旦我弄清楚如何将正确的 JSON data1 发布到视图中,下一步就是匹配并输出相应的 data2。提前谢谢!
【问题讨论】:
-
可能请求失败是因为您正在执行发布请求而没有发送数据,请尝试将所有表单字段放在 FormData 对象中并通过添加此
data: FormData将其与请求一起发送为将所有表单字段放入 $http 请求后的参数或标题不正确。希望对您有所帮助。 -
感谢您的回复。我不确定我这样做是否正确,但我是否只是将 FormData 中的表单数据包装为“JSON 对象”?我试过这个pastebin.com/QMZSr4AZ,它仍在处理“请求失败”错误,所以我猜我仍然无法发送数据。
-
2 件事:1) 你不应该在 $scope 上设置这些值,$scope 是为了模型绑定,它上面的所有值都是 Watched,它们的值应用于同名字段,这对性能有影响。只需将它们设置为局部变量,如 var method = 'POST',它们将作为闭包的一部分在 http 函数中使用。 2) 你知道如何进入 Chrome/Firefox 中的 JS 调试器吗?使用它来检查响应。在 Chrome 右上角 > 开发者工具中,如果添加调试器,则需要网络选项卡和控制台;错误函数的行。
-
嗨,克里斯,感谢您的评论和建议! $scope 上的模型绑定是有意义的,所以我会记得使用局部变量。而且我玩过 JS 调试器,但是由于我在本地进行测试,所以它一直在抛出关于同源策略的错误,所以我暂时使用的是 Firefox。
标签: php javascript json angularjs http-post