2010-12-21 18 views
0

単一のID文字列を使用して別のドメインの別のサーバーから緯度と経度の値を取得しようとしています。私はJQueryに慣れていませんが、同じ起源の問題を回避する最も簡単な方法と思われます。私はiframeを使用することができませんし、このJavaScriptを実行しているサーバにPHPをインストールすることはできません。クロスドメインPHPスクリプトからJSONPデータを取得しようとするとデータがありません

クエリが正常に実行されているように見えますが、結果が戻ってこないです。ここにいる誰かが、私が多分ここで最も明白なエラーを認識していないと思うので、助けてくれるアイデアがあると思っていました。

私の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"); 

の前、間、およびAFTERアラートが表示されます。 CALLEDおよびその他のjsonpcallbackアラートは表示されません。

jsoncallback関数が呼び出されたかどうかを確認する別の方法はありますか?

以下は、2番目のサーバで実行している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}) 

コールバック関数は含まれていませんが、元の呼び出しに含まれていない場合はそれほど期待できません。

ここで間違っている可能性がある人はいますか?

ありがとうございます!

+0

私は私が正しく理解している場合はわからないが、あなたは$アヤックス機能を使用してクロスドメインリクエストを行うことはできません。 –

+0

@Christian Joudrey:あなたは、 'jsonp'と一緒にすることができます – zerkms

+1

@zerkms私の悪い、彼は' jsonp'を設定したことに気付かなかった。その場合は、リソースコンソール(Firebug Netタブ)をチェックして、PHPスクリプトが返すものと適切なURLが呼び出されているかどうかを確認することができます。 –

答えて

0

変更コード

jsonp: "jsonpcallback", 

のこの部分を持つ:

jsonpCallback : "jsonpcallback", 
+0

私はあなたの提案を試して、それは動作していないようです。この変更を行うと、実際には成功関数が呼び出されなくなり、jsoncallbackを呼び出すことになりません。私はこの変更が何をするかについての説明が役立つかもしれないと思います。 – Alex

+0

基本的にPHPはjsonpcallback({"lat":404、 "lon":404})を出力するはずですが、jsonpcallbackパラメータをオーバーライドする必要があるかどうかはわかりません... –

関連する問題