Нет данных при попытке получить данные JSONP из междоменного PHP-скрипта - PullRequest
0 голосов
/ 21 декабря 2010

Я пытаюсь получить значения широты и долготы с другого сервера в другом домене, используя одну строку идентификатора.Я не очень знаком с JQuery, но, похоже, это самый простой способ обойти ту же проблему происхождения.Я не могу использовать iframes и не могу установить PHP на сервер, на котором работает этот javascript, что заставляет меня это делать.

Мои запросы, похоже, проходят правильно, но я не получаю никаких результатов.Я надеялся, что у кого-то здесь может быть идея, которая может помочь, поскольку я, вероятно, не смогу распознать наиболее очевидные ошибки здесь.

Моя функция javascript:

var surl = "http://...omitted.../pull.php";
var idnum = 5a; //in practice this is defined above

alert("BEFORE");

$.ajax({
    url: surl,
    data: {id: idnum},
    dataType: "jsonp",
    jsonp : "callback",
    jsonp: "jsonpcallback",
    success: function (rdata) {
        alert(rdata.lat + ", " + rdata.lon);
    }
});

alert("BETWEEN");

function jsonpcallback(rtndata) {
    alert("CALLED");
    alert(rtndata.lat + ", " + rtndata.lon);
}

    alert("AFTER");

Когда мой javascriptзапустить, до и после, отображаются предупреждения и ПОСЛЕ.CALLED и другие предупреждения jsonpcallback не отображаются.

Есть ли другой способ узнать, была ли вызвана функция jsoncallback?

Ниже приведен код PHP, который я запускаю на втором сервере.Я добавил таблицу подсчета в свою базу данных просто так, чтобы я мог сказать, когда этот скрипт запускается.Каждый раз, когда я звоню в javascript, в count добавляется дополнительный элемент, а номер идентификатора правильный.

<?php

    header("content-type: application/json");

if (isset($_GET['id']) || isset($_POST['id'])){

    $db_handle = mysql_connect($server, $username, $password);
    if (!$db_handle)
    {
        die('Could not connect: ' . mysql_error());
    }

    $db_found = mysql_select_db($database, $db_handle);
    if ($db_found)
    {
        if (isset($_POST['id'])){
            $SQL = sprintf("SELECT * FROM %s WHERE loc_id='%s'", $loctable, mysql_real_escape_string($_POST['id']));
        } 
        if (isset($_GET['id'])){
            $SQL = sprintf("SELECT * FROM %s WHERE loc_id='%s'", $loctable, mysql_real_escape_string($_GET['id']));
        }
        $result = mysql_query($SQL, $db_handle);
        $db_field = mysql_fetch_assoc($result);

        $rtnjsonobj -> lat = $db_field["lat"];
        $rtnjsonobj -> lon = $db_field["lon"];

        if (isset($_POST['id'])){
            echo $_POST['jsonpcallback']. '('. json_encode($rtnjsonobj) . ')';
        } 
        if (isset($_GET['id'])){
            echo $_GET['jsonpcallback']. '('. json_encode($rtnjsonobj) . ')';
        }

        $SQL = sprintf("INSERT INTO count (bullshit) VALUES ('%s')", $_GET['id']);
        $result = mysql_query($SQL, $db_handle);
        $db_field = mysql_fetch_assoc($result);
    }

    mysql_close($db_handle);
} else {
    $rtnjsonobj -> lat = 404;
    $rtnjsonobj -> lon = 404;
    echo $_GET['jsonpcallback']. '('. json_encode($rtnjsonobj) . ')';
}?>

Я не совсем уверен, верен ли jsonp, возвращаемый этим PHP.Когда я перехожу непосредственно к сценарию PHP без включения каких-либо параметров, я получаю следующее:

 ({"lat":404,"lon":404})

Функция обратного вызова не включена, но этого можно ожидать, если ее не включить в оригинал.звоните.

Кто-нибудь знает, что здесь может пойти не так?

Заранее спасибо!

1 Ответ

0 голосов
/ 21 декабря 2010

Изменить эту часть кода

jsonp: "jsonpcallback",

с:

jsonpCallback : "jsonpcallback",
...