Помогите получить ответ от сервера. Есть функция выполнения запросов в формате JSONP c помощью тега script
function call(a) {
alert(a);
}
function getJSONP(url, callback) {
// Create a unique callback name just for this request
var cbnum = "cb" + getJSONP.counter++; // Increment counter each time
var cbname = "getJSONP." + cbnum; // As a property of this function
if (url.indexOf("?") === -1) // URL doesn't already have a query section
url += "?jsonp=" + cbname; // add parameter as the query section
else // Otherwise,
url += "&jsonp=" + cbname; // add it as a new parameter.
var script = document.createElement("script");
getJSONP[cbnum] = function(response) {
try {
callback(response); // Handle the response data
}
finally { // Even if callback or response threw an error
delete getJSONP[cbnum]; // Delete this function
script.parentNode.removeChild(script); // Remove script
}
};
script.src = url; // Set script url
document.body.appendChild(script); // Add it to the document
}
getJSONP.counter = 0; // A counter we use to create unique callback names
getJSONP( "ph.php", call);
getJSONP( "http://my/ph.php", call);
А вот сам ph.php от куда в качестве ответа должны приходит данные
<?php
$seq = array("foo", "bar", "baz", "blong");
$json = json_encode($seq);
echo $json
Но браузер выводит ошибки: SyntaxError: expected expression, got '<'[Подробнее] ph.php:1 SyntaxError: expected expression, got '<'[Подробнее]
По поводу ошибки синтаксиса я уже писал в комментариях. Повторю:
после echo $json надо поставить точку с запятой
jsonp предполагает, что будет возвращаться не просто json, а обернутый в , так сказать, "доверяющую" функцию. Вы же не просто так задаете идентификатор для callback, а говорите, что вот именно этому запросу я буду доверять и исполню его как только он придет. В итоге, нужно на сервере писать:
// header("Content-type: application/json; charset=utf-8"); // пока не обязательно, но возможно понадобится
$seq = array("foo", "bar", "baz", "blong");
$json = json_encode($seq);
// вот ключевая строка - мы берем GET параметр, достаем из него идентификатор
// callback'а и возвращаем ответ с "вызовом" этого самого колбэка, в который
// и передаем ответ. В итоге на клиенте сможет отработать
// функция вот таким образом ---> getJSONP[cbnum]() <---
echo $_GET['jsonp'].'('.$json.')';
exit();
В данном случае ответ будет иметь вид: getJSONP.cb0(["foo","bar","baz","blong"])
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости