2014-01-04 3 views
-3

У меня есть ошибка:ошибка PHP + JavaScript: Неожиданный маркер D

Unexpected token D

Когда я пытаюсь отправить JSON из JavaScript в PHP. Я знаю, что ошибка вызвана на стороне сервера, и я попытался ее исправить, но затем я получаю еще одну ошибку, например Unexpected input, Unexpected end и тому подобное.

Я пытаюсь исправить это в течение 1 недели и не имеет результата. Моя цель - отправить данные на сервер и сделать сервер без ошибок, как я могу это сделать?

Мой код клиента:

$("#sendRoute").live('click', function() { 
    trackCoords_str = JSON.stringify(trackCoords); 
    final_time_m_str = JSON.stringify(final_time_m); 
    final_time_s_rounded_str = JSON.stringify(final_time_s_rounded); 
    aver_speed_km_h_rounded_str = JSON.stringify(aver_speed_km_h_rounded); 
    total_km_rounded_str = JSON.stringify(total_km_rounded); 
    $.ajax({ 
     url: "http://test.whirlware.biz/server/index.php", 
     type: "POST", 
     data: { 
      route: trackCoords_str, 
      timeInMinutes: final_time_m_str, 
      timeInSeconds: final_time_s_rounded_str, 
      averageSpeed: aver_speed_km_h_rounded_str, 
      distance: total_km_rounded_str, 
     }, 
     dataType: "json", 
     success: function(){alert("success!");}, 
     error: function (xhr, ajaxOptions, thrownError) { 
      alert(xhr.responseText); 
      alert(thrownError); 
     } 
    }); 
}); 

Мой код сервера:

$route = $_POST['route']; 
$timeInMinutes = $_POST['timeInMinutes']; 
$timeInSeconds = $_POST['timeInSeconds']; 
$averageSpeed = $_POST['averageSpeed']; 
$distance = $_POST['distance']; 

$trackCoords1 = json_encode($route); 
$final_time_m1 = json_encode($timeInMinutes); 
$final_time_s_rounded1 = json_encode($timeInSeconds); 
$aver_speed_km_h_rounded1 = json_encode($averageSpeed); 
$total_km_rounded1 = json_encode($distance); 

echo "Distance: </br>"; echo $distance; 
echo "Time in minutes: </br>"; echo $timeInMinutes; 
echo "Time in seconds: </br>"; echo $timeInSeconds; 
echo "Average speed: </br>"; echo $averageSpeed; 
+1

В JQuery вы говорите, вы хотите получить JSON от сервера. Вы не отправляете JSON с сервера. Насколько я могу судить, это главная проблема. –

ответ

1

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

Это означает, что вы действительно должны только звонить json_encode один раз. Ваш код должен, вероятно, будет больше похож:

echo json_encode(array(
    "distance" => $distance, 
    "time in minutes" => $timeInMinutes 
    //etc. 
)); 

Либо так, либо просто использовать HTML вместо JSON и удалить dataType: json линию на клиенте.

+0

Он работает как в вашем примере, но на сервере все переменные возвращают null, почему? –

+0

Я alos пытался изменить тип данных в html, но ошибка была такой же –

3

Ваша ошибка:

Unexpected token D

Затем собирается your site’s URL, выход просто:

Distance: </br>Time in minutes: </br>Time in seconds: </br>Average speed: </br> 

«неожиданный маркер», который D ссылается на первую букву вашего выхода, который является слово Расстояние.

Непонятно, для чего цель кода PHP. Ожидаете ли вы, что когда он подключится к этому PHP-коду, он берет данные и добавляет их в базу данных?

Значение вашего пути в настоящее время в настоящее время:

JavaScript Ajax via $_POST -> PHP parsing of $_POST -> And that PHP script is echoing contents?

Что эти echo s должны делать с процессом? Что происходит, когда вы просто комментируете echo?

Давайте посмотрим на код:

$route = $_POST['route']; 
$timeInMinutes = $_POST['timeInMinutes']; 
$timeInSeconds = $_POST['timeInSeconds']; 
$averageSpeed = $_POST['averageSpeed']; 
$distance = $_POST['distance']; 

$trackCoords1 = json_encode($route); 
$final_time_m1 = json_encode($timeInMinutes); 
$final_time_s_rounded1 = json_encode($timeInSeconds); 
$aver_speed_km_h_rounded1 = json_encode($averageSpeed); 
$total_km_rounded1 = json_encode($distance); 

echo "Distance: </br>"; echo $distance; 
echo "Time in minutes: </br>"; echo $timeInMinutes; 
echo "Time in seconds: </br>"; echo $timeInSeconds; 
echo "Average speed: </br>"; echo $averageSpeed; 

Что именно это? Таким образом, в первых вы назначаете переменные:

$route = $_POST['route']; 
$timeInMinutes = $_POST['timeInMinutes']; 
$timeInSeconds = $_POST['timeInSeconds']; 
$averageSpeed = $_POST['averageSpeed']; 
$distance = $_POST['distance']; 

Хорошо, а затем в следующий вы используете json_encode на этих переменных:

$trackCoords1 = json_encode($route); 
$final_time_m1 = json_encode($timeInMinutes); 
$final_time_s_rounded1 = json_encode($timeInSeconds); 
$aver_speed_km_h_rounded1 = json_encode($averageSpeed); 
$total_km_rounded1 = json_encode($distance); 

Тогда что это?

echo "Distance: </br>"; echo $distance; 
echo "Time in minutes: </br>"; echo $timeInMinutes; 
echo "Time in seconds: </br>"; echo $timeInSeconds; 
echo "Average speed: </br>"; echo $averageSpeed; 

И что вы теперь делаете с этими json_encode переменными? Какова цель вашего скрипта. Это просто беспорядок.

Возможно, ваш код в файл PHP, который ваш код сервера должен быть просто так:

$json_output = array(); 
$json_output['route'] = $_POST['route']; 
$json_output['timeInMinutes'] = $_POST['timeInMinutes']; 
$json_output['timeInSeconds'] = $_POST['timeInSeconds']; 
$json_output['averageSpeed'] = $_POST['averageSpeed']; 
$json_output['distance'] = $_POST['distance']; 

echo json_encode($json_output); 

EDIT Кроме того, глядя на свой код JavaScript, у вас есть Запятая в вашем JSON. И as explained on this question & answer thread, что запрещено в спецификации JSON. Поэтому я бы изменил это:

data: { 
    route: trackCoords_str, 
    timeInMinutes: final_time_m_str, 
    timeInSeconds: final_time_s_rounded_str, 
    averageSpeed: aver_speed_km_h_rounded_str, 
    distance: total_km_rounded_str, 
}, 

Это должно быть; обратите внимание на запятую после total_km_rounded_str, удаляется, чтобы сделать его просто total_km_rounded_str:

data: { 
    route: trackCoords_str, 
    timeInMinutes: final_time_m_str, 
    timeInSeconds: final_time_s_rounded_str, 
    averageSpeed: aver_speed_km_h_rounded_str, 
    distance: total_km_rounded_str 
}, 
+0

Спасибо, я знаю, как можно избавиться от этой ошибки? –

+0

Ваше решение работает, но оно возвращает «нуль» во всех переменных, как я могу его решить? –

+1

@red_sensor У меня нет на 100% идеи, что ваш код пытается сделать. Вы хотите публиковать переменные с помощью JavaScript на PHP, но тогда вы говорите, что переменные пустые? Вы действительно проверяете, есть ли у 'trackCoords_str',' final_time_m_str', 'final_time_s_rounded_str',' aver_speed_km_h_rounded_str', 'total_km_rounded_str' значения? – JakeGould

1

Удалить запятая здесь

distance: total_km_rounded_str 
          ^HERE 
+1

Хороший ответ. Слишком плохо, что оригинальный плакат едва понимает, каковы их проблемы. Посмотрите на комментарии к моему ответу. – JakeGould

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