JSONP через PHP возвращает не так, как jQuery

Я пытаюсь получить данные междоменного пользователя через JSONP, и получаю разные результаты через PHP и jQuery. Во-первых, вот JSONP, сгенерированный через PHP (с соответствующим заголовком ('Content-type: application / json; charset = utf-8')):

hsAuthCallback({"planID":4,"memberPlan":"EMPLOYEE","memberName":"Fred"});

Я пытаюсь получить два метода, сначала jQuery, который работает

$(function() {
    $.ajax({
        type: 'GET',
        url: 'https://url.com/path_to_file',
        jsonpCallback: 'hsAuthCallback',
        contentType: "application/json",
        dataType: 'jsonp',
        success: function(data) {
            $('#jsOutput').text( JSON.stringify(data) );
        },
        error: function(jqXHR, textStatus, errorThrown) {
           console.log("error("+jqXHR+", "+textStatus+", "+errorThrown+")");
        }
    });
});

Возвращает, как и ожидалось:

{"planID":4,"memberPlan":"EMPLOYEE","memberName":"Fred"}

Далее идет PHP, где проблема лежит (я использую функцию для декодирования jsonp)

// Decode JSONP (http://felix-kling.de/blog/2011/01/11/php-and-jsonp/)
function jsonp_decode($jsonp, $assoc = false) { 
    if($jsonp[0] !== '[' && $jsonp[0] !== '{') { 
        $jsonp = substr($jsonp, strpos($jsonp, '('));
    }
    return json_decode(trim($jsonp,'();'), $assoc);
}    
$url = 'https://url.com/path_to_file';
$jsonp = file_get_contents($url);
$plan_data = jsonp_decode($jsonp, true);
var_dump($plan_data);

Возвращает:

array(3) {
  ["planID"]=>
  int(0)
  ["memberPlan"]=>
  string(0) ""
  ["memberName"]=>
  string(0) ""
}

Я проверил, используя реальный файл JSON поверх S3, и это похоже на работу. У меня ограниченный контроль над сгенерированным JSONP. Какие-нибудь мысли?

0 ответов

Другие вопросы по тегам