Новые API Restful, такие как Google, OpenStreetview используют простой механизм обратного вызова.
В основном вы вызываете API, добавляя параметр &callback=my function
,
При выполнении вызова этого API, в результате моя функция называется передачей набора данных JSON.
Я пытаюсь создать тот же механизм для API, который я создаю для личного использования.
Насколько я понял, мой API должен возвращать JavaScript, который вызывает функцию, переданную в сценарии.
Для теста я создал это:
function apiCall(URL,values, keyPair,cBackPair) {
// URL specifics URL to call
// keyPair: <keyname>=<key>; leave black if unneeded
// cBacPair: <callBackParametername>=<functionname>
// called is: URL?values&keypair&cBackPair
var request = (keyPair)?'&'+keyPair:'';
request = URL + '?'+ encodeURI(values) + request + '&' + cBackPair;
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", request);
document.body.appendChild(script);
}
function callAPI() {
apiCall('http://xllent.nl/map/ajax/answer.php','q=one','','s=doit');
}
function doit(result) {
alert(result);
}
Для проверки звоню callAPI
в процессе.
Сценарий answer.php
очень простой:
<?$s = $_GET['s'];
?>
<script type="text/javascript">
doit('jeroen');
</script>
Позже скрипт будет использовать $s
чтобы вызвать правильный сценарий и, конечно, предоставить пользовательские данные.
Сейчас я просто пытаюсь получить сценарий doit('jeroen');
быть запущенным. Но ничего не происходит.
Typing javascript:doit('jeroen');
в окне браузера дает результат, который я ожидаю.
Какие-либо предложения?
Не окружайте свой JavaScript <script>
теги. Вы не генерируете файл HTML с телом JavaScript. Вы должны думать об этом, как будто вы генерируете файл JavaScript на лету.
Файлы Javascript также не начинаются и не заканчиваются <script>
Других решений пока нет …