Intereting Posts
Класс form_validation не загружается (codeigniter) получить содержание URL-адреса PHP Запрос MySQL работает в phpmyadmin, но строки не возвращаются в наборе результатов PHP userfunctions.php, почему я не могу добавить этот файл в Typo3 fileadmin / Автоматическое обновление времени в PHP с помощью Ajax Laravel – путь к экземпляру UploadedFile Передача переменной из одного файла PHP в другой Хранение файлов cookie Laravel превышает каждый раз каждые несколько посещений скачать файл с ftp с помощью curl и php Как правильно избежать обратного слэша, чтобы соответствовать буквальной обратной косой чертой в шаблонах регулярных выражений с одним кавычком и двойным кавычком Шифрование с использованием AES-128 в Java Удалите все разрывы строк из источника html mcrypt_encrypt не работает должным образом на PHP 5.6.9 Как пропустить 1-й ключ в цикле массива? PHPExcel получает имя столбца относительно заданного столбца

Простой пример jQuery, PHP и JSONP?

Я столкнулся с проблемой политики одного и того же происхождения, и, исследуя этот вопрос, я обнаружил, что наилучшим способом для моего конкретного проекта было бы использовать JSONP для запросов на перекрестный поиск.

Я читал эту статью от IBM о JSONP , но на 100% я не понимаю, что происходит.

Все, что я прошу здесь, это простой jQuery> запрос PHP JSONP (или что бы это ни было терминология;)) – что-то вроде этого (очевидно, это неверно, его просто так вы можете получить представление о том, чего я пытаюсь достичь :)) :

JQuery:

$.post('http://MySite.com/MyHandler.php',{firstname:'Jeff'},function(res){ alert('Your name is '+res); }); 

PHP:

 <?php $fname = $_POST['firstname']; if($fname=='Jeff') { echo 'Jeff Hansen'; } ?> 

Как я мог бы превратить это в правильный запрос JSONP? И если бы я должен был хранить HTML в возвращаемом результате, это тоже сработает?

Когда вы используете $ .getJSON во внешнем домене, он автоматически выполняет запрос JSONP, например, мой слайдер tweet здесь

Если вы посмотрите на исходный код, вы увидите, что я называю Twitter API, используя .getJSON.

Таким образом, ваш пример: ЭТО ИСПЫТАНО И РАБОТАЕТ (вы можете перейти на http://smallcoders.com/javascriptdevenvironment.html, чтобы увидеть его в действии)

 //JAVASCRIPT $.getJSON('http://www.write-about-property.com/jsonp.php?callback=?','firstname=Jeff',function(res){ alert('Your name is '+res.fullname); }); //SERVER SIDE <?php $fname = $_GET['firstname']; if($fname=='Jeff') { //header("Content-Type: application/json"); echo $_GET['callback'] . '(' . "{'fullname' : 'Jeff Hansen'}" . ')'; } ?> 

Обратите внимание на? Callback =? и + res.fullname

Прежде всего вы не можете сделать запрос POST с помощью JSONP.

Что в основном происходит, так это то, что динамический тег скрипта вставляется для загрузки ваших данных. Поэтому возможны только запросы GET.

Кроме того, ваши данные должны быть завернуты в функцию обратного вызова, которая вызывается после завершения запроса для загрузки данных в переменную.

Весь этот процесс автоматизируется jQuery для вас. Просто использование $ .getJSON во внешнем домене не всегда работает. Я могу рассказать о личном опыте.

Лучше всего добавить & callback =? вам url.

На стороне сервера вы должны убедиться, что ваши данные обернуты в эту функцию обратного вызова.

то есть.

 echo $_GET['callback'] . '(' . $data . ')'; 

РЕДАКТИРОВАТЬ:

У меня недостаточно комментариев, чтобы прокомментировать ответ Лиама, поэтому решение здесь.

Заменить линию Лиама

  echo "{'fullname' : 'Jeff Hansen'}"; 

с

  echo $_GET['callback'] . '(' . "{'fullname' : 'Jeff Hansen'}" . ')'; 

Больше предложений

JavaScript:

 $.ajax({ url: "http://FullUrl", dataType: 'jsonp', success: function (data) { //Data from the server in the in the variable "data" //In the form of an array } }); 

PHP CallBack:

 <?php $array = array( '0' => array('fullName' => 'Meni Samet', 'fullAdress' => 'New York, NY'), '1' => array('fullName' => 'Test 2', 'fullAdress' => 'Paris'), ); if(isset ($_GET['callback'])) { header("Content-Type: application/json"); echo $_GET['callback']."(".json_encode($array).")"; } ?> 

Чтобы сервер отвечал с допустимым массивом JSONP, оберните JSON в скобках () и предварите callback :

 echo $_GET['callback']."([{'fullname' : 'Jeff Hansen'}])"; 

Использование json_encode () преобразует собственный PHP-массив в JSON:

 $array = array( 'fullname' => 'Jeff Hansen', 'address' => 'somewhere no.3' ); echo $_GET['callback']."(".json_encode($array).")"; 
 $.ajax({ type: "GET", url: '<?php echo Base_url("user/your function");?>', data: {name: mail}, dataType: "jsonp", jsonp: 'callback', jsonpCallback: 'chekEmailTaken', success: function(msg){ } }); return true; 

В контроллере:

 public function ajax_checkjp(){ $checkType = $_GET['name']; echo $_GET['callback']. '(' . json_encode($result) . ');'; } 

Использовать это ..

  $str = rawurldecode($_SERVER['REQUEST_URI']); $arr = explode("{",$str); $arr1 = explode("}", $arr[1]); $jsS = '{'.$arr1[0].'}'; $data = json_decode($jsS,true); 

Теперь ..

используйте $data['elemname'] для доступа к значениям.

отправьте запрос jsonp с помощью объекта JSON.

Формат запроса:

 $.ajax({ method : 'POST', url : 'xxx.com', data : JSONDataObj, //Use JSON.stringfy before sending data dataType: 'jsonp', contentType: 'application/json; charset=utf-8', success : function(response){ console.log(response); } })