Как создать в php search.json twitter-like - PullRequest
2 голосов
/ 17 октября 2010

Я создал на своем веб-сайте файл search.php, который генерирует строку JSON, помогая мне использовать в своих приложениях ajax в реальном времени.

Но теперь я хотел бы открыть его какAPI для других, но я обнаружил, что $ .get $ .getJSON $ .ajax не позволяет использовать мой файл search.php с других серверов / доменов.

Как я могу преобразовать свой поиск phpв search.json, точно так же, как Twitter, передавая ему параметры.

Thx

Ответы [ 2 ]

2 голосов
/ 17 октября 2010

getJSON ограничен ограничениями безопасности вашего браузера, которые блокируют домены не происхождения.Чтобы сделать кросс-домен, вы должны использовать JSONP, который требует, чтобы вы обернули данные в функцию, которая определена переменной обратного вызова (например, $ _GET ['jsonp_callback']).например,

Search.php

<?php
    echo $_GET['jsonp_callback'] . '(' . json_encode($data). ');'
    // prints: jsonp123({"search" : "value", etc. });
?>

jQuery

$.ajax({
  dataType: 'jsonp',
  data: 'search=value',
  jsonp: 'jsonp_callback',
  url: 'http://yourserver.com/search.php',
  success: function () {
    // do stuff
  },
});

Просто убедитесь, что переменная обратного вызова, которую выопределение в вашем php-скрипте совпадает со значением jsonp, которое вы вызываете с помощью запроса .ajax (или по умолчанию оно называется «обратный вызов»).

0 голосов
/ 17 октября 2010

Twitter использует два механизма для предоставления междоменного доступа к домену search.twitter.com: crossdomain.xml (для Flash) и JSONP (для JavaScript).

С JSONP вызывающий JavaScript включает callback =?параметр в URL, где?это имя функции обратного вызова. Сценарий на стороне сервера переносит закодированный JSON как:

?(<JSON here>)

Это позволяет закодировать параметры запроса в виде URL-адреса src тега сценария, предоставляя междоменный доступ к этому XMLHttpRequestне позволяет.Когда данные поступают, они выполняются как скрипт.Интерпретатор JavaScript декодирует JSON, поскольку он является допустимым подмножеством JavaScript, а затем вызывает функцию обратного вызова с декодированным JSON в качестве аргумента.Для реализации JSONP в вашем PHP-скрипте не требуется более нескольких строк кода.

...