尝试从跨域PHP脚本获取JSONP数据时没有数据

时间:2010-12-21 03:39:59

标签: php jquery jsonp

我正在尝试使用单个id字符串从另一个域上的另一个服务器中提取纬度和经度值。我对JQuery不是很熟悉,但它似乎是解决相同原点问题的最简单方法。我无法使用iframe,我无法在运行此javascript的服务器上安装PHP,这迫使我不得不这样做。

我的查询似乎正常,但我没有得到任何结果。我希望这里有人可能会有所帮助,因为我可能不会在这里发现最明显的错误。

我的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运行时,会显示BEFORE,BETWEEN和AFTER警报。未显示CALLED和其他jsonpcallback警报。

还有另一种方法可以判断是否已调用jsoncallback函数吗?

下面是我在第二台服务器上运行的PHP代码。我将计数表添加到我的数据库中,以便我可以判断该脚本何时运行。每次调用javascript时,count都会插入一个额外的项目,并且id号是正确的。

<?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) . ')';
}?>

我不完全确定这个PHP返回的jsonp是否正确。当我直接进入PHP脚本而不包含任何参数时,我会得到以下结果。

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

不包括回调函数,但如果原始调用中未包含回调函数,则可以预期。

有没有人知道这里会出现什么问题?

提前致谢!

1 个答案:

答案 0 :(得分:0)

更改代码的这一部分

jsonp: "jsonpcallback",

使用:

jsonpCallback : "jsonpcallback",