我正在尝试将HTML表单提交给服务器,但它失败了。我这里有几个问题。
我正在提出CORS请求。这是客户的要求,我对此无能为力。
(我的应用位于localhost:3000/login.html
&我的服务器位于http://localhost:3001/Login/auth
)
localhost:3001中的服务器接受JSON请求并返回JSON响应。
(我已在浏览器中禁用了web-security以允许CORS请求)
所以,我创建了HTML表单并试图用AJAX提交它。在这里你可以看到代码。
$(function(){
$("#loginform").submit(function(e){
e.preventDefault();
// var data = $("#loginform").serialize();
var data = {"username" : $("#username").val(),"password" : $("#password").val()};
alert(JSON.stringify(data));
$.ajax({
type: "POST",
url: "http://localhost:3001/Login/auth",
data: data,
contentType: "application/json",
crossDomain : true,
dataType: "json",
success: function(data) {
alert("success" + JSON.stringify(data));
},
error:function(data){
alert('error : '+JSON.stringify(data));
}
});
});
});
我在PHP(codeigniter)中创建了模拟服务器。这是代码。
public function auth(){
$input_data = json_decode(trim(file_get_contents('php://input')), true);
$debug_export = var_export(file_get_contents('php://input'), true);
file_put_contents('new.txt',$debug_export . PHP_EOL, FILE_APPEND);
$user = 'admin';
$pass = 'admin';
$token = '1';
foreach($input_data as $key=>$value) {
if ($key === 'username') {
$this_user = $value;
}
if ($key === 'password') {
$this_password = $value;
}
}
if(isset($this_user) && isset($this_password)){
if($this_password === $pass && $this_user === $user){
echo json_encode(array('token'=>$token));
}else{
echo json_encode(array('token'=>'null'));
}
}
return 0;
}
当我提交表格时,我会收到这样的回复。
....
<p>Severity: Warning</p>
<p>Message: Invalid argument supplied for foreach()</p>
<p>Filename: controllers/Login.php</p>
<p>Line Number: 77</p>
....
我的'new.txt'文件的日志详细信息如下。
''
'username=admin&password=admin'
我真的不知道我在这里做错了什么。有人可以帮我从这里出去吗?