2015-06-22 4 views
-2

SOLVED: Код, указанный здесь, был верным, но некоторые из PHP-кода, подключающихся к базе данных, нуждались в исправлении, теперь я работаю. Я использовал предложения Quentin в комментариях, чтобы исправить мою проблему.Ajax не отправляет данные на PHP

Я пытаюсь отправить JSON массива через ajax в файл PHP, а затем запустить файл php. Это мой Аякс:

$('#submit').click(function() { 
    $.ajax({ 
    method: "POST", 
    url: "submit.php", 
    data: {selectedImageArray: selectedImageArray} 
    }).done(function(msg) { 
    alert("Data Saved: " + selectedImageArray); 

    }); 
}); 

В моем PHP файл я подключиться к базе данных, то есть это:

$array = $_POST['selectedImageArray']; 
    $sql = $dbh->prepare("INSERT INTO pending_trades (steam_id, trade_items, is_giving, is_receiving, has_started) VALUES (:steamid, :itemlist, '1', '0', '0')"); 
    $sql->bindParam(':steamid', $steamprofile['steamid']); 
    $sql->bindParam(':itemlist', $array); 

    $sql->execute(); 

Я хочу, чтобы отправить «selectedImageArray» JSON в PHP и выполнить запрос Msql используя его нажатием этой кнопки:

<button id="submit" class="button1" >Submit<span></span></button> 

При нажатии на кнопку, я получаю «данные сохраняются: array data» сообщение, но код PHP не запускается. Почему это не работает?

EDIT: Я поставил data: {selectedImageArray: selectedImageArray} вместо data: selectedImageArray, потому что мне сказали, что делает его в формат JSON, это правильно?

+0

Где '$ steamprofile [ 'Steamid'] 'отсюда? Удалить 'include()' – Daan

+0

Я никогда не видел 'include()' в JavaScript до ... Независимо от того, где конкретно это не удается? Когда вы отлаживаете код PHP, что происходит? – David

+2

@SulthanAllaudeen, зачем им требовать синхронного запроса? Здесь он не нужен и блокирует пользовательский интерфейс, пока он не будет выполнен. –

ответ

-1

Вы можете добавить тип контента JSON. другой мудрый он будет рассматривать как текст.

var data = JSON.stringify({selectedImageArray: selectedImageArray}); 
$.ajax({ 
method: "POST", 
dataType: 'json', // If your response is JSON 
contentType: "application/json", 
url: "submit.php", 
data: data 
}).done(function(msg) { 
alert("Data Saved: " + selectedImageArray); 
include ('submit.php'); 
}); 
+0

Установка 'dataType' влияет только на то, как будет обрабатываться ответ с сервера, это не повлияет на то, как выполняется PHP-код. –

+0

Мы не можем видеть, что такое ответ от сервера, поэтому мы не знаем, JSON. Клиентский код обрабатывает его как текст в любом случае. – Quentin

+0

'contentType:" application/json ",' просто неверно - значение 'data' не является JSON, а код на стороне сервера читается с' $ _POST', поэтому сервер не ожидает JSON. – Quentin

-1

Прежде всего, посмотрите на отладчик вашего браузера, который действительно отправлен в файл php. Второе: вы отправите JSON. Это означает, что у вас есть форма POST массив вроде этого:

[{ 
    "key1": "value1", 
    "key2": "value2" 
}] 

Итак, в заключение этого не работает:

$array = $_POST['selectedImageArray']; 

Вам нужно получить доступ к электронной. г. $_POST['key1'] напрямую.

+1

«Вы пошлете на него JSON». - Это неправда. jQuery будет генерировать закодированные данные и заполнять '$ _POST', если задан синтаксис в вопросе. – Quentin

1

вы добавляете в базе данных массив не строка попытаться использовать:

$sql->bindParam(':itemlist', json_encode($array)); 

и когда вы получите данные, просто запустите:

$array = json_decode($itemlist); 
+0

Это ужасное решение проблемы. Реляционные базы данных великолепны, потому что они могут делать отношения. Если это * * проблема (что неясно, потому что OP еще не определил проблему должным образом), то решение состоит в том, чтобы настроить таблицу с внешним ключом, а затем вставить значения в цикле. – Quentin

+0

ваше решение лучше, только если OP необходимо использовать запрос для получения реляционных данных, если ему нужно получить все данные на идентификатор быстрее. – Macerier

+0

Это ложная экономика. Денормализованные данные неизбежно оказываются проблемой через 6 месяцев. – Quentin

Смежные вопросы