Передача JS объекта (ассоциативный массив) через Ajax в PHP не работает - PullRequest
1 голос
/ 25 апреля 2020

Я пытаюсь передать объект JS (ассоциативный массив), который динамически создаю, в запрос PHP / MySQLi.
- Когда я пишу объект JS (transferData) на консоли это выглядит как задумано (см. Ниже).
- Когда я проверяю запрос PHP / MySQLi отдельно, он тоже работает.
- Поэтому я предполагаю, что моя проблема связана с вызовом Ajax который я использую для передачи объекта JS в PHP / MySQLi.

Может кто-нибудь сказать мне, как должен выглядеть правильный вызов Ajax здесь (например, используя JSON et c.) Или что я должен изменить на стороне PHP / MySQLi ?

Мой JS объект:

0: {vId: "04567901", rId: "DE-002"}
1: {vId: "04567902", rId: "DE-005"}
2: {vId: "04567903", rId: "DE-007"}
length: 3
__proto__: Array(0)

Мой jQuery / Ajax:

$('#btnConfirm').click(function() {
    $.ajax({
        type: 'POST',
        url: 'updateIds.php',
        data: {
            transferData: transferData
        },
        success: function(result){
            $('#modalSuccess').modal('show');
        }
    });
});

My PHP / mySQLi:

$postData = $_POST; 
$transferData = $_POST['transferData'];

$conn = new mysqli($host, $username, $password, $database);
if($conn->connect_error) {
    die("Connection Error: " . $conn->connect_error);
}   
$stmt = $conn->prepare("UPDATE myTable l SET l.rId = ? WHERE l.vId = ?");
foreach($transferData as $vId => $rId) {
    $stmt->bind_param('ss', $rId, $vId);
    $stmt->execute();
}

$stmt->close();
$conn->close(); 

Обновление:
Я сосредоточен на вызове Ajax, как мне кажется есть причина, по которой данные не достигают страницы PHP.

Большое спасибо за любую помощь в этом, Том

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Когда вы используете запрос POST, лучше указать тип данных, который вы ожидаете от серверной стороны, используйте « dataType » в вашем запросе ajax, а затем проанализируйте данные на действительные javascript объект в вашем обработчике успеха, используя JSON .parse () .

$('#btnConfirm').click(function() {
    $.ajax({
        type: 'POST',
        url: 'updateIds.php',
        dataType: 'JSON', // I'm expecting a json response
        data: {
            transferData: transferData
        },
        success: function(result){
            // parse json
            const data = JSON.parse(result);

            $('#modalSuccess').modal('show');
        }
    });
});
1 голос
/ 25 апреля 2020

просто получите ваши данные в php, например:

$postData = file_get_contents("php://input"); 
$transferData = json_decode($postData, true)['transferData'];
...