2016-11-27 3 views
0

私はデータを取得しようとしている外部サーバー上のスクリプトを持っています。JSONPコードの試行で何が問題になっていますか?

それはtest.phpを呼ばれるPHPスクリプトだと、それは内部の次ました:

<?php 
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 
    $parts = parse_url($url); 
    parse_str($parts['query'], $query); 
    $limit = $query['limit']; 
    $return_array["result"] = $limit; 
    echo json_encode($return_array); 
?> 

それでは、私は、以下のものを使用してそのサーバーにコールを送信します。

/* this is included in head */ 
<script src="http://some-website.com/get-text/index.php?limit=10&q=returnText"></script> 

/* in Body */ 
<script> 
    function returnText(data) { 
    console.log('result: ' + data); 
    } 
</script> 

あなたがに行くときそのPHPページだけでは、出力は

{"result":"10"} 

ですが、私はJavaScriptコードを持っているファイルを実行すると、らエラー:?

index.phpの上限= 10 & Q = returnText:1キャッチされないでSyntaxError:予期しないトークン:

あなたは、私がこれを見るこのエラー行の右側にあるリンクをクリックしたとき:

{"result":"10"} 

コロンから始まり右に行く赤い下線付き。

私は、JSONPが有効になっているかどうかを確認しましたが、実際のサーバー構成などのようには見えませんでした。

私は間違っていますか?

答えて

1

は二つの問題があります。

  1. JSONPでは、あなたが関数呼び出しのJSONをラップする必要があります。それがJSONPの仕組みです。あなたのURLを考える

    、PHPコードの応答は

    returnText({"result":"10"}) 
    

    がクエリパラメータからqパラメータを取得し、関数名として応答してそれを使用する必要があります。 (あなたが好きならば、あなたが何か他のものにそれを呼び出すことができますが、そのパラメータの通常の名前は、callbackである。)

  2. あなたは、PHPファイルを呼び出すscript要素がheadであるが、script要素が定義することを言いましたreturnTextコールバックが本文にあります。 headにあるものは、ページの解析をすべて停止し、検索されるまでブラウザを待機させ、検索されて実行されるときにのみ解析を続行できるようにするため、表示されたscript要素では機能しません。つまり、returnTextファンクションはまだ存在しません。。コールバック関数を含むscriptのの後にscriptに移動すると、JSONPを照会する方がより意味があります。 (そして、あなたがそれにasync or deferを考えるかもしれません。)

+0

あなたが言っているだけではなくエコーencode_json($配列)「関数呼び出しでJSONをラップ」と言うとき、私はエコー「のfunctionnameような何かをしたいです( '.encode_json($ array);.);;コメントセクションに書式設定されたコードを投稿することをお勧めしません。 –

+0

スクリプト/機能の順番に間違っていたああ、あなたの提案をお試しいただきありがとうございます。 –

+0

aaaahhhhhhhhhhhhhh私はそれを作った!ありがとうございます。少なくとも私はそう思った。私はパラメータに "コールバック"を入れる必要はありませんでした。私は関数名をjson_encode行と連結してエコーしました。これは私があなたに感謝したよりも遠いです。 –

関連する問題