2015-04-28 4 views
1

PHP файл с именем page.phpОтправка объекта JSON из PHP в Javascript

<?php 
$php_variable = $_GET['param1']; 
$uv = str_replace("{ZIP Code}", $php_variable,'http://iaspub.epa.gov/enviro/efservice/getEnvirofactsUVDAILY/ZIP/{ZIP Code}/JSON'); 
$homepage = file_get_contents($uv); 
echo $homepage; 
?> 

стартовой сохраняет объект JSON, который содержит три поля я хотел бы, чтобы распечатать эти три поля в моем HTML-файл. Я создал функцию ajax для печати полей на веб-странице.

<form action="../getuv.php"> 
    <select name="param1" onchange="this.form.submit()"> 
     <option value="">Choose a zipcode </option> 
     <option value="92507">92507</option> 
     <option value="30078">30078</option> 
     <option value="92606">92606</option> 
     <option value="30004">30004</option> 
     <option value="32034">32034</option> 
     <option value="37160">37160</option> 
    </select> 
</form> 
<script> 
$.ajax({ 
type: "POST", 
url: "page.php", 
success: function (data) { 
    console.log(data); 
    var obj = jQuery.parseJSON(data); 
    document.getElementById("demo").innerHTML = "UV INDEX" + "<br>" + "Zip code: " + obj[0].ZIP_CODE + "<br>"; 
} 
}); 
</script> 

Ничего не распечатывается. Кроме того, на данный момент я попал на страницу php и остаюсь там. Я хотел бы вернуться к исходной странице html.

Я отправляю param1. Param1 - это индексный код, который пользователь выбирает из выпадающего меню.

+0

Вместо 'эха $ домашней страницы;' использовать 'эхо json_encode ($ домашняя страница); '. Формат будет JSON, и 'jQuery.parseJSON (data)' больше не потребуется. – machineaddict

+0

Вы просматривали запрос/ответ в консоли браузера? –

+1

@machineaddict Если я правильно прочитал его, он выберет JSON, поэтому не нужно кодировать – Machavity

ответ

1

Теперь, когда эта форма добавлена, ясно, в чем проблема: вы делаете ajax-вызов при загрузке страницы без каких-либо параметров, а когда вы вносите изменения в свой select, вы отправляете форму old- образный способ, без использования ajax. Это вызывает перезагрузку страницы, когда ваш вызов ajax запускается снова, без каких-либо параметров.

Что вам нужно сделать, это:

  1. Загрузите форму, но без onhange обработчика;
  2. Не запускайте вызов ajax при загрузке страницы;
  3. Вместо этого добавьте обработчик событий, когда изменилось значение select, установите правильный тип данных и отправьте данные, которые необходимо отправить.

Конечный результат будет выглядеть примерно так:

<form action=""> 
    <select name="param1"> 
     <option value="">Choose a zipcode </option> 
     <option value="92507">92507</option> 
     <option value="30078">30078</option> 
     <option value="92606">92606</option> 
     <option value="30004">30004</option> 
     <option value="32034">32034</option> 
     <option value="37160">37160</option> 
    </select> 
</form> 
<script> 
$(document).ready(function() { 
$('select').on('change', function(event) { 
    // Make sure the form does not get submitted the old-fashioned way 
    event.preventDefault(); 

    // Your ajax call, including the parameter, data type and method 
    $.ajax({ 
    type: "GET",     // GET to match your php script 
    url: "page.php", 
    dataType: 'json',    // Let jQuery parse the results 
    data: $('form').serialize(), // Send you data 
    success: function (obj) { 
     console.log(obj);    // this will be an object for valid json 
     document.getElementById("demo").innerHTML = "UV INDEX" + "<br>" + "Zip code: " + obj[0].ZIP_CODE + "<br>"; 
    } 
    }); 
}); 
}); 
</script> 
+0

Итак, если я удаляю обработчик onchage, как только я нажму на раскрывающееся меню, он придет к функции выше? Кроме того, что вы имеете в виду, не запускайте вызов ajax при загрузке страницы? как в этом не называете? но вы сделали это в приведенном выше коде. Кроме того, с сериализацией возникает синтаксическая ошибка. Я совершенно новичок в этом. Так что я все еще собираю все это. Благодарю. – Ria

+0

@Ria Я вызываю его внутри обработчика событий, когда что-то происходит. Вы называете это просто, когда вы открываете страницу. И да, была опечатка, строка должна была закончиться с запятой (то же самое с 'dataType'), я отредактировал ответ. Обратите внимание, что я также поместил скрипт в обработчик документа. – jeroen

+0

есть также отсутствующая скобка где-то там. но спасибо за объяснение – Ria

2

это shoulde быть

$php_variable = $_POST['param1']; 

потому, что вы используете метод пост асинхронность

type: "POST", 
url: "page.php", 
+0

param1 должен быть GET, потому что я предоставляю его скрипту php – Ria

1

использование

header('Content-Type: application/json'); 
echo $homepage; 

и в вашем JS Script

$.ajax({ 
    type: "GET", 
    url: "page.php", 
    data: { 
      param1: 'some value' 
      }, 
    success: function (data) { 
     console.log(data); 
     document.getElementById("demo").innerHTML = "UV INDEX" + "<br>" + "Zip code: " + data[0].ZIP_CODE + "<br>"; 
    } 
    }); 
+0

Что происходит, когда я получаю param1 из выпадающего меню? Как сохранить это значение в «некоторой стоимости»? – Ria

2

Вы, кажется, не отправляете param1 в сценарий.

<script> 
$.ajax({ 
type: "GET", 
url: "page.php", 
data: {param1: $("select[name='param1']").val()}, 
dataType: 'json', 
success: function (obj) { 
    document.getElementById("demo").innerHTML = "UV INDEX" + obj[0].UV_INDEX + "<br>" + "Zip code: " + obj[0].ZIP_CODE + "<br>"; 
} 
}); 
</script> 

Попробуйте этот. Он должен работать.

+0

я. Я просто этого не показывал. param1 - это почтовый индекс, который пользователь щелкает из выпадающего меню. – Ria

+0

Что делает ваш браузер от 'page.php'? Получаете ли вы какие-либо ошибки или код состояния 500? – lshas

+0

@ Ria вам нужно показать, как вы отправляете param1, потому что код выше не показывает его, поэтому трудно понять, что может быть неправильным, если вы не показываете нам весь код. – lshas

1

Вместо того, чтобы использовать заголовок

вы можете использовать этот

<?php 
$reponse = "what you need"; 
print(json_encode(['reponse' => $reponse])); 
?> 
Смежные вопросы