我正在从表单数据构造一个对象数组,以便发送到处理脚本,然后将处理脚本发送到API。 API不允许CORS ajax请求,因此需要先发送到外部脚本。
我可以返回简单的字符串,但是当我对我拥有的数据进行字符串化时,来自服务器的响应总是POST或GET(已尝试过两者)数据只是一个空数组。
JS
$('#enrol').submit(function(e) {
e.preventDefault();
var collection = [];
$('#enrol .form-row').each(function() {
var email = $(this).find('input[type="email"]').val();
var c1Val = $(this).find('.c1').is(':checked') ? 'true' : 'false';
var c2Val = $(this).find('.c2').is(':checked') ? 'true' : 'false';
var c3Val = $(this).find('.c3').is(':checked') ? 'true' : 'false';
var c4Val = $(this).find('.c4').is(':checked') ? 'true' : 'false';
var c5Val = $(this).find('.c5').is(':checked') ? 'true' : 'false';
var c6Val = $(this).find('.c6').is(':checked') ? 'true' : 'false';
var c7Val = $(this).find('.c7').is(':checked') ? 'true' : 'false';
var person = {
'email' : email,
'course1' : c1Val,
'course2' : c2Val,
'course3' : c3Val,
'course4' : c4Val,
'course5' : c5Val,
'course6' : c6Val,
'course7' : c7Val,
}
collection.push(person);
});
var dataString = JSON.stringify(collection);
$.ajax({
url: 'http://www.example.com/script.php',
data: dataString,
crossDomain: true,
success: function(response) {
console.log(response);
},
error: function(response) {
console.log(response);
alert(response.responseText);
}
});
})
PHP
header("Access-Control-Allow-Origin: URLHERE");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
var_dump($_GET);
我没有得到的是,如果我只是JSON.stringify一个简单的字符串,我得到返回的数据,但对象数组似乎作为一个空数组到达PHP脚本 - 或者至少这是控制台.log建议。我输出了dataString变量以确保它有数据 - 确实如此。
答案 0 :(得分:0)
我在自己的项目中有类似的东西。 这对我有用:
jsonObj = new Object();
jsonObj['email'] = email;
jsonObj['course1'] = c1Val;
.
.
.
$.ajax({
type: 'POST',
url: 'http://www.example.com/script.php',
data: {"data": JSON.stringify(jsonObj)},
dataType:'JSON',
cache: false,
.
.
.
});
<强> PHP:强>
var_dump($_REQUEST['data']);
答案 1 :(得分:0)
当数据以JSON格式到达时,PHP不会自动填充超级全局$_GET
和$_POST
。你需要在PHP方面做两件事:
JSON-将其解码为PHP数据结构
// capture your raw JSON
$datastring = file_get_contents("php://input");
// decode it into a PHP array
$collectionArray = json_decode($datastring, true);
在jQuery方面,可能不需要以下内容,但我会明确说明发送到服务器的内容类型:
$.ajax({
url: 'http://www.example.com/script.php',
data: dataString,
contentType : "application/json",
...
答案 2 :(得分:0)
解决方案很简单,我没有为后置阵列提供密钥 -
data: dataString
应该是
data: { data: dataString }
然后var_dump($_GET['data'))
的输出包含我发送的数据。