2014-10-20 2 views
0

Я передаю переменную из функции AJAX на страницу PHP. Функция AJAX вызывается нажатием кнопки & значение передается как параметр. Функция AJAX передает эту переменную на страницу php to_php_page.php, откуда HTTP-запрос GET поступает на сервер. Эта переменная передается как параметр. Мы получаем много городских данных в качестве ответа. Соответствующий ответ хранится в разных массивах. & кодируется как JSON &, который возвращается к функции AJAX. Все эти данные отображаются сразу.Невозможно отобразить данные. SyntaxError: JSON.parse: неожиданный символ в строке 1 столбец 1 данных JSON

Но, вместо получения ответа, я получаю сообщение об ошибке.

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data 

AJAX Функция

<script> 

    function get_data(n) 
    { 
     if(window.XMLHttpRequest) 
     { 
      xmlhttp=new XMLHttpRequest(); 
     } 
     else 
     { 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange=function() //callback fn 
     { 
      if(xmlhttp.readyState==4 && xmlhttp.status==200) 
      { 
       var jsonStr = JSON.parse(xmlhttp.responseText); 
       var count_array=parseInt(jsonStr.count); 
       var la=jsonStr.la; 
       var ny=jsonStr.ny; 
       var sj=jsonStr.sj; 
       var lv=jsonStr.lv; 
       var ut=jsonStr.ut; 
       var dc=jsonStr.dc; 
       var miami=jsonStr.miami; 
       var columbus=jsonStr.columbus; 
       var kc=jsonStr.kc; 
       var ch=jsonStr.ch; 

       for (i = 0; i < count_array; i++) 
       { 
        (function() 
        { 
         alert(la); 
         alert(ny); 
         alert(sj); 
         alert(lv); 
         alert(ut); 
         alert(dc); 
         alert(miami); 
         alert(columbus); 
         alert(kc); 
         alert(ch); 
        })(); 
       } 

      } 
     } 
     xmlhttp.open("GET","to_php_page.php?namee="+n,true); 
     xmlhttp.send(); 
    } 
</script> 

to_php_page.php

<?php 
$namee_value=$_GET["namee"]; 
// Above variable is passed as argument with the url to obtain the response. 

$url="server_url?nam=".$namee_value; 
$jsondata= httpGet($url); 
$details_array = json_decode($jsondata, true); 
$count=count($details_array['country']); 

function httpGet($url) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
    curl_setopt($ch,CURLOPT_HEADER, false); 
    $output=curl_exec($ch); 
    curl_close($ch); 
    return $output; 
} 

//for storing los angeles details 
$la=array(); 
for($i=0;$i<$count;$i++) 
{ 
    $la[$i]= $details_array['country'][$i]['los_angeles']; 
} 

//for storing new york details 
$ny=array(); 
for($i=0;$i<$count;$i++) 
{ 
    $ny[$i]= $details_array['country'][$i]['new_york']; 
} 

//for storing san jose details 
$sj=array(); 
for($i=0;$i<$count;$i++) 
{ 
    $sj[$i]= $details_array['country'][$i]['san_jose']; 
} 

//for storing las vegas details 
$lv=array(); 
for($i=0;$i<$count;$i++) 
{ 
    $lv[$i]= $details_array['country'][$i]['las_vegas']; 
} 

//for storing utah details 
$ut=array(); 
for($i=0;$i<$count;$i++) 
{ 
    $ut[$i]= $details_array['country'][$i]['utah']; 
} 

//for storing washington details 
$dc=array(); 
for($i=0;$i<$count;$i++) 
{ 
    $dc[$i]= $details_array['country'][$i]['washington_dc']; 
} 

//for storing miami details 
$miami=array(); 
for($i=0;$i<$count;$i++) 
{ 
    $miami[$i]= $details_array['country'][$i]['miami']; 
} 

//for storing columbus details 
$columbus=array(); 
for($i=0;$i<$count;$i++) 
{ 
    $columbus[$i]= $details_array['country'][$i]['columbus']; 
} 

//for storing kansas city details 
$kc=array(); 
for($i=0;$i<$count;$i++) 
{ 
    $kc[$i]= $details_array['country'][$i]['kansas_city']; 
} 

//for storing chicago details 
$ch=array(); 
for($i=0;$i<$count;$i++) 
{ 
    $ch[$i]= $details_array['country'][$i]['chicago']; 
} 

$what_the_array = array(
    'count' => $count, 
    'la' => $la, 
    'ny' => $ny, 
    'sj'=> $sj, 
    'lv'=>$lv, 
    'ut'=>$ut, 
    'dc'=>$dc, 
    'miami'=>$miami, 
    'columbus'=>$columbus, 
    'kc'=>$kc, 
    'ch'=>$ch 
); 

echo json_encode($what_the_array); 
?> 

UPDATE:

JSON быть разобран:

{ 
    "country": 
     [ 
      { 
       "los_angeles": "value1", 
       "new_york": "value2", 
       "san_jose": "value3", 
       "las_vegas": "value4", 
       "utah": "value5", 
       "washington_dc": "value6", 
       "miami": "value7", 
       "columbus": "value8", 
       "kansas_city": "value9", 
       "chicago": "value10" 
      } 
     ] 
} 

NB: Есть ли альтернатива для функции AJAX, которую я использовал ?? Я имею в виду еще одну функцию AJAX. Я использую это все время. Я ищу намного лучшую функцию AJAX.

+0

поделиться JSON, который будет разобран – Mayank

+0

Добавлен JSON. Пожалуйста, смотрите. @Mayank –

ответ

0

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

1) Content-Type. Укажите тип содержимого и кодировку перед отправкой из JSON из PHP:

Header('Content-Type: application/json;charset=utf8'); 

(и обеспечить содержание в UTF8 кодированный).

2) Я недавно испытал вашу проблему. Я на 100% уверен, что JSON был прав (проверен с помощью jsonlint из данных, снятых с провода с помощью tcpdump), и тот же код работал до того дня. Ошибка не воспроизводилась в Chrome. Он также остался необъяснимым, после обновления Firefox и очистки кеша, , но он никогда не представлял себя на еще не обновлен Firefox на другом ПК. В некоторых случаях я заметил, что как Firefox, так и Chrome, похоже, запрашивают пакет JSON, но обрабатывают более раннюю версию из кеша, но не могут воспроизвести это явление каким-либо предсказуемым образом. Я делать знает, хотя это, чтобы предотвратить его, достаточно добавить неповторяющийся элемент запрос:

xmlhttp.open("GET","to_php_page.php?namee="+n + "&ts=" + Date.now(), true); 

Это эффективно отключает кэширование для этого запроса, так и для больших JSON ресурсов, которые меняются редко, это ISN Это действительно хорошая вещь.

Другие возможности

Вы должны проверить, действительно ли локоны сторона запроса PHP вернуться правильно. Возможно, у вас есть ошибка, возможно, предупреждение cUrl, выданное httpGet.

Попробуйте открыть URL-адрес непосредственно в браузере.Если вы видите что-то вроде

PHP Warning: curl_exec: ... { (JSON) } 

ну, это, конечно, не JSON и JSON.parse() будет жаловаться, что «P» в «PHP Warning» действительно неожиданный характер.

+0

У меня есть вариант Вариант 1. Это не сработало. @lserni –

+0

Иногда я получаю ответ, а иногда и нет. Почему это так? @lserni –

+0

Вариант 2 также производит такую ​​же ошибку. Что мне теперь делать? @lserni –

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