2016-02-15 3 views
0

У меня возникли проблемы с получением значения из запроса xmlhttp после отправки его с помощью ajax в php-файл и вставки его в базу данных mysql. Я получаю от yahoo finance api вывод, который вы можете увидеть в html-фрагменте. После этого значение этого элемента html должно быть отнесено к файлу insertvolume.php.Декодировать многомерный массив и вставлять в mysql

После успешной отправки я сохраняю данные в переменной с именем $jsonString и декодирует ее. Затем я пытаюсь вставить определенное значение из массива в мою базу данных mysql, но это не сработает. Я думаю, проблема заключается в том, что значение относится к любым другим массивам, но я не знаю, как это написать. Мне нужен только массив с именем results Любые подсказки?

HTML-:

<div id="output">{"query{"count":1,"created":"20160215T09:15:04Z","lang":"deDE","resu‌​lts":{"quote":{"symbol":"ZN","Ask":"2.05","LastTradeRealtimeWithTime":null,"Chang‌​ePercentRealime":null,"ChangeFromYearHigh":"-0.45","LastTradeWithTime":"4:00pm<b>‌​1.81</b>",astTradePriceOnly":"1.81", "Volume":"500","HighLimit":null,"LowLimit":null,"DaysRange":‌​"1.781"}}}}</div> 

JavaScript:

var outputt = $('#output').text(); 
$.ajax({ 
      type: "POST", 
      dataType: "json", 
      url: "insertvolume.php", 
      data: {myData: outputt}, 
      success: function(data){ 
       //alert('Items added'); 
      } 
    }); 

некоторые пайса кода из insertvolume PHP:

$jsonString = $_POST['mydata']; 
    $jsonArray = json_decode($jsonString, true); 
$jsonArray1 = $jsonArray['query']['results']['quote']; 
    if ($stmt = $mysqli->prepare('INSERT INTO volume (stocksymbol, volume, time) VALUES (?, ?, now())')) { 

     /* bind parameters for markers */ 
     $stmt->bind_param($jsonArray1['symbol'], $jsonArray1['volume']); 

     /* execute query */ 
     $stmt->execute(); 

     /* close statement */ 
     $stmt->close(); 
    } 
+0

Я не могу сказать, если что JSON не является действительным, или он получил перепутались, когда вы вставили его. Как есть, есть разрывы строки в нем, хотя. – Tomanow

+0

Я сделал эти разрывы строк для лучшего чтения, но я могу их удалить. – Bodoppels

+1

Является ли ваш html-вывод таким: '

{"query{"count":1,"created":"20160215T09:15:04Z","lang":"deDE","results":{"quote":{"symbol":"ZN","Ask":"2.05","LastTradeRealtimeWithTime":null,"ChangePercentRealime":null,"ChangeFromYearHigh":"-0.45","LastTradeWithTime":"4:00pm1.81",astTradePriceOnly":"1.81","HighLimit":null,"LowLimit":null,"DaysRange":"1.781}}}}
' –

ответ

2

После декодирования данных вы не можете напрямую извлекать данные json. Мы должны создать для этого объект. Здесь я даю вам ссылку на ссылку, как получить доступ к значениям json.

Get value from JSON array in PHP

+0

Могу ли я его декодировать так: '$ jsonArray = json_decode ($ jsonString, true);' и в mysql instad из $ jsonArray1 ['volume'] 'this:' $ query-> results [0] -> { "цитата"} -> Volume'? Я не понимаю правила/синтаксис, когда выбираю конкретное значение этого: '$ query-> results [0] -> {"quote"} -> Volume' это правильно? – Bodoppels

1

В javascript-коде написано как var outputt = $ ("#output") .val();

Но div не имеет значения. Содержимое присутствует внутри div. Поэтому измените код строки на

var outputt = document.getElementById ('output'). TextContent и попробуйте.

Теперь вы можете получить доступ к массиву в javascript. Но мы не можем получить доступ к данным выходного кода из вашей строки.

+0

О, спасибо, я не знал, что у div есть значение свойства, но оно не меняло sth на поведение. – Bodoppels

1

В Ajax вызова удалить строку

CONTENTTYPE: "приложения/JSON; кодировка = UTF-8",

, а затем выполнить. Он будет работать

+0

Я удаляю строку, но ничего не происходит. – Bodoppels