![](/img/trans.png)
[英]Send only few properties of objects within an Array in ajax call with jQuery
[英]Ajax - send array of objects using jQuery
我正在從表單數據構造一個對象數組,以便發送到處理腳本,該腳本隨后將數據發送到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腳本-至少這就是console.log建議。 我已經輸出了dataString變量以確保它具有數據-確實如此。
我自己的項目中也有類似的東西。 這對我有用:
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']);
當數據以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",
...
該解決方案很簡單,我沒有為發布數組提供密鑰-
data: dataString
本來應該
data: { data: dataString }
然后, var_dump($_GET['data'))
包含我正在發送的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.