Я новичок в JSON, но имею хороший опыт работы с PHP и javascript. Вопрос прост, и ответ может быть проще. У меня возникли проблемы с отправкой данных из файла PHP на сервере, в другой файл PHP, который у меня есть локально, который будет получать данные в формате JSON с сервера. Что я делаю не так?
Javascript Frag (локальный)
$(document).ready(function(){ //attach a jQuery live event to the button $.getJSON('http://www.xpal.com/ws_users.php?action=get_user_data&user_id=33',function(data) { alert(data); //uncomment this for debug $('#showdata').html("<p>Username= "+data.username+"<br> Email= "+data.email+"<br> Firstname="+data.firstname+"<br> Lastname="+data.lastname+"</p>"); }); });
PHP Frag (Server @ xpal.com):
$ users = новые пользователи;
if($_GET['action']=="get_user_data") { $user_id=$_GET['user_id']; $assoc=array( "username"=>$users->return_username($user_id), "email"=>$users->return_user_emailid($user_id), "firstname"=>$users->return_user_firstname($user_id), "lastname"=>$users->return_user_lastname($user_id) ); echo json_encode($assoc); }
Редактировать :
Сообщение об ошибке: XMLHttpRequest не может загрузить xpal.com/ws_users.php?action=get_user_data&user_id=33. Происхождение localhost не разрешено Access-Control-Allow-Origin.
Чтобы использовать jsonp, как следует из другого предложения, вы должны либо поставить «callback =?» в конце вашего URL-адреса или использовать $ .ajax () и указать, что dataType – jsonp. Примеры здесь .
Вы не можете совершать ajax-вызовы в другом домене, на котором размещена страница. Ознакомьтесь с той же политикой происхождения, которую браузеры реализуют по соображениям безопасности.
Существует способ сделать переадресацию ajax-вызовов, и он включает использование JSONP . В принципе, вы добавляете тег скрипта в свой собственный фрейм, и этот тег скрипта указывает на конечную точку сервера в любом месте в Интернете. Поскольку значение src тега скрипта не ограничено одной и той же политикой происхождения, вы можете связаться с этим сервером. Но теперь у вас должен быть способ вернуть этот результат. Это делается с использованием JSONP, где вы указываете на своем сервере запрос javascript-функции, которую хотите, чтобы возвращаемый javascript вызывал. Этот возвращенный javascript может содержать javascript-данные, которые затем передаются в нужную функцию. JSONP требует сотрудничества между кодом клиента и кодом сервера, поскольку обычный вызов ajax может не поддерживать дополнительную часть JSONP. Но с этим сотрудничеством с обеих сторон вы можете обойти одну и ту же политику происхождения для конечных точек сервера, которые поддерживают JSONP.
Как уже объяснялось в других ответах, это не работает из-за той же политики происхождения .
Теперь JSONP (см. Ответ jfriend00) – это один из способов, но у него есть свои недостатки. (см. конец этой страницы ).
Существует еще один способ: и это PHP-запрос удаленного сервера и отправить ответ клиенту. См. Эту страницу:
Межсетевой запрос AJAX с помощью jQuery
Основным недостатком этого метода является то, что весь трафик будет проходить через ваш сервер, так как вам нужно позвонить на удаленную страницу, получить ответ и отправить ответ клиенту.
Его называют той же политикой происхождения . Короче: домен, в котором находится ваш код, является единственным доменом, с которым может взаимодействовать javascript (по умолчанию)
JQuery не получит json?
Вы можете запустить php-скрипт на своем собственном сервере, если это вариант.
Эта:-
<?php $details = file_get_contents('http://www.xpal.com/ws_users.php?action=get_user_data&user_id=33'); var_dump(json_decode($details));
вернул это: –
object(stdClass)[1] public 'username' => string 'sniper' (length=6) public 'email' => string 'ajithsubramanian@gmail.com' (length=26) public 'firstname' => string 'Ajith' (length=5) public 'lastname' => string 'Ravi' (length=4)
Означает ли это вас на правильном пути? Вы можете сделать вызов AJAX сценарию на основе этого на вашем сервере.
Вы должны взглянуть на CORS и его реализацию.
В вашем случае возможным решением будет использование заголовка (Access-Control-Allow-Origin: http: // localhost) в вашем php-файле. Замените localhost доменом, который ограничен SOP.
Хорошую ссылку на CORS можно найти на странице https://developer.mozilla.org/en/HTTP_access_control .
Вы можете использовать один и тот же jQuery, чтобы сделать кросс-доменный запрос, просто проверьте междоменный запрос ссылки, у них есть демонстрация того, как реализовать кросс-доменный запрос …
В своем коде убедитесь, что все правильно,
если в вашем выходе есть какая-либо ошибка, метод jsonp не отображает ошибку (неправильная обработка ошибок).
Ваш вывод json должен быть покрыт echo $ _GET ['callback']. ". .json_encode ($ array).") "; как в упомянутой ссылке.