Невозможно проанализировать возвращенную строку JSON, поскольку она добавляет тип данных в строку JSON. - PullRequest
0 голосов
/ 29 октября 2018

У меня есть базовая функция AJAX, которая вызывает скрипт PHP, и скрипт возвращает совершенную строку JSON, я проверил ее.

Вот как выглядит код AJAX:

function onLoad() {
    $.ajax({
        url: "php/api.php",
        data: {symbol: "MSFT"},
        async: true, 
        dataType: 'text',
        contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
        success:  function (data) {
            console.log("data is: "); 
            console.log(JSON.parse(data)); 
            },
            error: function (xhr, ajaxOptions, thrownError) {
                console.log("There was an error");
                console.log(thrownError);
            }
    }); 
}

Вот как выглядит код php:

<?php 

error_reporting(0);

$symbol =$_GET['symbol'];

$data = array("year" => 2018);
$data_string = json_encode($data);


function grabHTML($function_host_name, $url)
{

$ch = curl_init();
$header=array('GET /1575051 HTTP/1.1',
    "Host: $function_host_name",
    'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language:en-US,en;q=0.8',
    'Cache-Control:max-age=0',
    'Connection:keep-alive',
    'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4)         
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36',
    );

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, 300);
    curl_setopt( $ch, CURLOPT_COOKIESESSION, true );

    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

    curl_setopt($ch,CURLOPT_COOKIEFILE,'cookies.txt');
    curl_setopt($ch,CURLOPT_COOKIEJAR,'cookies.txt');
    curl_setopt($ch,CURLOPT_HTTPHEADER,$header);

    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_STDERR,$f = fopen(__DIR__ . "/error.log", "w+"));


    $returnHTML = curl_exec($ch); 

if($errno = curl_errno($ch)) {
    $error_message = curl_strerror($errno);
    echo "cURL error ({$errno}):\n {$error_message}";
}   
   curl_close($ch);
    return $returnHTML; 

} // end of function grabHTML

$url = "https://newsapi.org/v2/everything?q=" . $symbol . "&from=2018-10-29&sortBy=publishedAt&apiKey=0cc1ee750c69497899f81b14d32dfbf9";

$results = grabHTML("newsapi.org", $url);

echo $results;

Однако на внешнем интерфейсе тип данных предварительно добавляется в строку JSON, т. Е.

string(17484) " (perfect JSON string here) " 

Таким образом, другой "добавляется в конец данных. Это приводит к сбою функции JSON.parse ().

Я перепробовал все "dataType: 'text'", "dataType: 'html'" и "dataType: 'json' ", и он все равно добавляет тип данных каждый раз.

Мне нужно остановить добавление типа данных.

Brent.

1 Ответ

0 голосов
/ 03 ноября 2018

Решение было установить curl_setopt ($ ch, CURLOPT_VERBOSE, false); В скрипте PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...