JSON-перекрестная связь с файлом PHP и локальным файлом javascript

Я новичок в 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, чтобы сделать кросс-доменный запрос, просто проверьте междоменный запрос ссылки, у них есть демонстрация того, как реализовать кросс-доменный запрос …

В своем коде убедитесь, что все правильно,

  • выход http://www.xpal.com должен быть в формате json
  • если в вашем выходе есть какая-либо ошибка, метод jsonp не отображает ошибку (неправильная обработка ошибок).

  • Ваш вывод json должен быть покрыт echo $ _GET ['callback']. ". .json_encode ($ array).") "; как в упомянутой ссылке.