Данные не возвращаются от сервера JSONP

188
19 декабря 2017, 19:07

Помогите получить ответ от сервера. Есть функция выполнения запросов в формате 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 '<'[Подробнее]

Answer 1
  1. По поводу ошибки синтаксиса я уже писал в комментариях. Повторю:

    после echo $json надо поставить точку с запятой

  2. 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"])

READ ALSO
Локализация laravel 5.4

Локализация laravel 5.4

Всем доброго времени сутокПодскажите пожалуйста столкнулся с такой задачей

268
График + PHP + MySQL

График + PHP + MySQL

Делаю лабу в институтеТребуемые библиотеки flot, pchart v1

195
РА3РАБОТАТЬ ПРОГРАММУ [требует правки]

РА3РАБОТАТЬ ПРОГРАММУ [требует правки]

Разработать программу, расставляющую скобки во введенном арифметическом выражении с целью максимизации его значенияTo develop the program, set the brackets...

311
Подключение boost к Visual Studio 2017

Подключение boost к Visual Studio 2017

Гуглил, устанавливают через command prompt, но я его не нашелПодскажите другие способы по подключению boost к visual studio 2017

442