Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jSONP отправка и получение (в зависимости от критерия) данных (https://javascript.ru/forum/jquery/32814-jsonp-otpravka-i-poluchenie-v-zavisimosti-ot-kriteriya-dannykh.html)

nvp2 31.10.2012 01:02

jSONP отправка и получение (в зависимости от критерия) данных
 
Приветствую, уважаемые ГУРУ.
Будьте добры, покажите небольшой пример такой задачи. На стороне пользователя посредством JSONP серверу нужно передать значение переменной IQ. На стороне сервера анализируется это значение и если оно больше, к примеру, 100 - то обратно отсылает значение переменной K1, если меньше - К2 и выводится пользователю.

Сами логические операции и вывод конечного результата в браузере проблем не составляет, а вот прием и передача значений посредством JSONP для меня оказалось большой проблемой. Два дня серфинга просторов интернета и разбора примеров не дали ни каких результатов :cray:

Skipp 31.10.2012 09:50

О_о как так, про ajax столько материалов, что наверное пол жизни читать будешь и все пишут почти про одно и то же. Пишите на чём встряли, дальше думаю помогу...

nvp2 31.10.2012 11:56

Проблема в том, что не могу понять сам принцип. Все примеры что нашел, работают либо с yahoo либо еще с чем то.

Ковыряю вот такой пример
var IQ = $('#iq').val();
$.ajax({
url: 'http://site.ru/json.php?callback=?',
type: 'get',
dataType : 'jsonp',
success: function(data){
// выводим результат
}
});

вот не могу понять (чувствую себя уже полным ...ком) как передать значение IQ серверу. и на стороне сервера как ее обработать... к примеру чтобы можно было отправить обратно вот таким вот выдом:

<?php
...
$iq = значение переданной переменной;
if ($iq > 100) {echo $_GET['callback']."({result:'больше 100'});";}
else {echo $_GET['callback']."({result:'меньше 100'});";}

?>

Dmitriyff 31.10.2012 12:46

для начала, вы уверены что вам нужен jsonp, скрипты находятся на одном сайте?

вот тут подробней про работу jQuery.ajax

ну и простой скрипт передачи параметров на сервер
var IQ = $('#iq').val();

$.ajax({
  url: 'http://somesite',
  data: {
    IQ: IQ // передвем IQ
  },
  type: 'GET' // тип запроса, в данном случае GET, переменная будет для php в $_GET['IQ'],
  dataType: 'json' // ожидаемый тип ответа
  success: function(data) {
     // тута data будет распарсенный объект
  }
})


// ответ php должен быть правильный json
'{"name": "value"}';

nvp2 31.10.2012 13:01

по поводу jsopn - точно. с 2-х сайтов хочу вести лог в одном месте - на третьем.

А как правильно на стороне php вырезать значение переданной пеменной, чтобы работать с ней как с обыкновенной php-переменной $iq?
На стороне клиента более менее все понятно, а вот серверная реализация нет
Заранее благодарю за ответ

nvp2 31.10.2012 13:42

С передачей разобрался... Спасибо огромное, Dmitriyff.

Но теперь другая трабла. Сервер передает значение ({'result':'777'})

но ajax код не срабатывает
success: function(data) {
alert(data.result);
}

Хотя по идее должен

NikolasGrad 31.10.2012 14:47

Ответ сервера может быть:
$response = array(
    "result" => "777",
    "result2" => "888",
    "result3" => "999"
); // $response может быть готовым объектом или массивом
return json_encode(str_replace('\'', '"', $response)); // преобразование объектов php в json-формат

nvp2 31.10.2012 14:58

Что-то я совсем запутался.
Вот что у меня есть: клиентский код...

var iq = '777';
$.ajax({
	url: 'http://site.ru/jsonpp.php?callback=?',
	data: { IQ: iq },
	type: 'GET', 
	dataType: 'jsonp',
	crossDomain: true,
	success: function(res) {
        alert(res.result);
	}
});


Серверный код:
$data = json_decode($_GET['IQ']);

if ($data == '777') {
	$response = array(
		"result" => "111"
	);
}
	else {
		$response = array(
			"result" => "000"
		);
	}
return json_encode(str_replace('\'', '"', $response));


Раньше дебугер возвращал ответ "({'result':'777'})", сейчас - "Перезагрузите страницу, чтобы получить источник для: http://site.ru/jsonpp.php?callback=jsonp1351680978035&_=135168097 8053&IQ=777"

Skipp 31.10.2012 15:10

nvp2,
Формат json: {"параметр1":"значение1","пара метр2":"значение2"}
jsonp: callback функци(тоже самое что и выше)
Обрати внимание на кавычки...

NikolasGrad 31.10.2012 15:24

Может проблема в адресе?
url: 'http://site.ru/jsonpp.php?callback=?',

и на сервере json_decode надо при передаче объектов:
$data = json_decode($_GET['IQ']);

если передаете простые переменные:
$data =$_GET['IQ'];


Часовой пояс GMT +3, время: 11:02.