2016-03-30 4 views
1

Я извлеченный некоторые данные в формате JSON с MarkitOnDemand API, содержание JSON Я хочу, чтобы внутри тега тела HTML строки, как это:Преобразования JSON строка в HTML в объект JSON

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>jQuery Autocompelete</title> 
    <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> 
    <script src="//code.jquery.com/jquery-1.10.2.js"></script> 
    <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
</head> 
<body> 
{"Status":"SUCCESS","Name":"Apple Inc","Symbol":"AAPL","LastPrice":109.59,"Change":1.91,"ChangePercent":1.77377414561664,"Timestamp":"Wed Mar 30 15:59:00 UTC-04:00 2016","MSDate":42459.6659722222,"MarketCap":607630850970,"Volume":3211276,"ChangeYTD":105.26,"ChangePercentYTD":4.11362340870226,"High":110.41,"Low":108.6,"Open":108.64}</body> 
</html> 

выше код HTML строка находится в «данных» строка моего AJAX вызова ниже:

$(function(){ 
    $('#searchform').on('submit', function(event){ 
     event.preventDefault(); 

     var requestdata = 'symbol=' + $('#query').val(); 
     $.ajax({ 
      url: "receivesearch.php", 
      method: "get", 
      data: requestdata, 
      success: function(data){ //html string in this data parameter 

       //CONFUSED HERE 

      } 
     }); 
    }); 
}); 

Но мне не удалось получить строку JSON из тела тега и разобрать его в объект JSON ...

Может ли кто- легкость справиться с этой проблемой? Огромное спасибо!!

Вот мой PHP код:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>jQuery Autocompelete</title> 
    <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> 
    <script src="//code.jquery.com/jquery-1.10.2.js"></script> 
    <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
</head> 
<body> 
<?php 
    if(isset($_GET['symbol'])){ 
     $lookupURL = "http://dev.markitondemand.com/MODApis/Api/v2/Quote/json?symbol=" . $_GET['symbol']; 
     $jsonhtml = file_get_contents($lookupURL); 
     echo $jsonhtml; 
    } 
?> 
</body> 
</html> 
+1

Почему вы отправляете его таким образом, а не как 'application/json' output? Похоже, глупый способ отправить json, а также добавить дополнительные скрипты с ним также – charlietfl

+0

'JSON.parse (data)' – Wainage

+0

var obj = $ .parseJSON ($ ('body'). Html()) –

ответ

2

Markit On Demand API поддерживает JSON, так что есть что-то не так с вашим исходным запросом.

Посмотрите на этот URL для примера:
http://dev.markitondemand.com/MODApis/Api/v2/Quote/json?symbol=AAPL

Он возвращает чистые данные в формате JSON, которые могут быть обработаны с использованием $.parseJSON(data)

UPDATE: Попробуйте этот код, например:

var requestData = 'symbol=AAPL'; 
$.ajax({ 
    url: "http://dev.markitondemand.com/MODApis/Api/v2/Quote/json", 
    method: "get", 
    data: requestdata, 
    success: function(data){ //html string in this data parameter 
     $symbolResponse = $.parseJSON(data); 
    } 
}); 

ОБНОВЛЕНИЕ 2: Используйте этот код PHP: (Только этот код и ничего больше)

<?php 

if (isset($_GET['symbol'])) { 
    header('Content-Type: application/json'); 
    $lookupURL = "http://dev.markitondemand.com/MODApis/Api/v2/Quote/json?symbol=" . $_GET['symbol']; 
    $jsonhtml = file_get_contents($lookupURL); 
    echo $jsonhtml; 
} 

?> 
+0

Итак, я попытался использовать dataType: «json» в моем $.ajax(), но он не смог получить результат данных JSON. Я использовал следующий код для вызова api: if (isset ($ _ GET ['symbol'])) { $ lookupURL = "http://dev.markitondemand.com/MODApis/Api/v2/Quote/json?symbol= ". $ _GET [ 'символ']; $ jsonhtml = file_get_contents ($ lookupURL); echo $ jsonhtml; } – Paul

+0

@Paul См. Мой обновленный пример –

+0

Большое вам спасибо! Он работает! Но мне просто интересно, почему мой исходный код с использованием php в качестве прокси не работает, не могли бы вы дать мне какой-то намек? – Paul

2

Вам нужно разобрать результат дважды: один раз как HTML, используя $.parseHTML(), то вы можете получить текст из этого и передать это в $.parseJSON().

Что-то вдоль этих линий:

success: function(data){ //html string in this data parameter 
    var html = $.parseHTML(data); 
    var body = $(html).text(); 
    var json = $.parseJSON(body); 
    // use the JSON data here 
} 
+0

Спасибо, я пробовал что-то подобное с вашим кодом, однако есть ошибка «SyntaxError: JSON.parse: неожиданный персонаж в строка 5 столбца 3 данных JSON », не знаю, почему это происходит. – Paul

+0

Ну, информация с прокси-сервером PHP была бы существенной. Мой код работал бы нормально, если бы основной текст был чистым JSON-данным (это было не потому, что ваш прокси-сервер не кодировал HTML-код, поэтому любые '' или '&' в JSON отображали бы HTML-код недействительным. – Lucero

+0

Большое вам спасибо за ваше объяснение! – Paul

-1

У вас есть возможность JSON.parse(data), $.parseJSON(data) или ип-консультировал eval(data).

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