【发布时间】:2014-10-03 01:14:23
【问题描述】:
我正在尝试将从用户输入收集的一些数据从 javascript 表单发送到 php 文件进行处理。我可以在硬编码 php 值并且只发送不带参数的情况下完成这一壮举,就像这样......
xhr.open("post", "http://host/path/script.php", true);
xhr.send();
但是一旦我尝试发送带有这样的用户输入值的数组...
xhr.open("post", "http://host/path/script.php", true);
xhr.send(data);
我得到一个“未定义的错误”,不太清楚为什么。该变量的类型是“FormData”,我真的不认为这个问题与变量本身有任何关系,只是不确定为什么它没有参数但与数据参数无关。
为了排除同源策略问题,我的 php 文件中有这些标头...
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description, X-Request-With');
不过,我对此很陌生,所以这里可能有问题。
编辑:控制台确实给了我这个错误......
XMLHttpRequest cannot load http://host/path/script.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://javascripthost/path' is therefore not allowed access.
看来存在访问控制问题...但我不知道如何解决它
编辑 2:添加标题以防此信息有帮助...
Remote Address:127.0.0.1:80
Request URL:http://host/path/script.php
Request Method:OPTIONS
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Access-Control-Request-Headers:content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:localhost
Origin:http://host2
Referer:http://host2/script
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
Response Headers
Allow:OPTIONS, TRACE, GET, HEAD, POST
Content-Length:0
Date:Thu, 02 Oct 2014 14:08:24 GMT
Public:OPTIONS, TRACE, GET, HEAD, POST
Server:Microsoft-IIS/8.5
X-Powered-By:ASP.NET
【问题讨论】:
-
你是如何构建
data的?你得到什么错误信息?从哪条线?查看开发人员工具的“网络”选项卡。你看到你期望的请求了吗?它的格式是否符合您的预期?是 POST 请求吗?反应如何? -
查看您提出的请求。我推测您正在触发预检 OPTIONS 请求,而不是在服务器上处理它。
-
我认为您可能对 OPTIONS 请求是正确的...在“网络”选项卡中,该方法说 OPTIONS not POST...但我不确定我做错了什么?我指定 post...我不知道预检 OPTIONS 请求是什么
-
感谢您的链接...我仍然对如何处理预检 OPTIONS 请求感到有些困惑。当我查看网络选项卡时,我只看到“内容类型”作为请求标头
标签: php post xmlhttprequest