0

次の文字列を取得できます

([{"data":{"Rate":"","RoleA":"Student","NameA":"student","RoleB":"Tutor","NameB":"tutorB","Give":"0","Get":"1","Accept":"0"}}]);

http://api.jquery.com/jQuery.ajax/から読みましたが、どこで間違ったのかまだわかりません。

これは私のコードです

            $.ajax({
                        type:           'GET',
                        dataType:       'jsonp',
                        jsonpCallback:  'jsoncallback',
                        data: 
                        {

                                nameB:  nameB,
                                roleB:  roleB,
                                get123: get123,
                                accept: accept
                        },
                        url: 'http://mydomain.com/check.php?callback=?',
                        success: function(data){
                            alert(data[0].data.RoleA);
                            //alert("ABC");
                            //if ( $("#role").text() == "Tutor" )
                            //{
                            //  window.location.href='tutor_home.html';
                            //}
                            //else
                            //{
                            //  window.location.href='student_home.html';
                            //}         
                        },
                        error: function(jqXHR, textStatus){
                            alert("Request failed: " + textStatus);
                        }
            });

クロムから、json文字列を見つけることができ、正常に見えます。ただし、成功メッセージは警告せず、代わりに parsererror エラーを警告します。どこを変更すればよいですか? ありがとう

私のphp

<?php 

header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Content-type: application/json");

include('mysqlConfig.php');


$nameB = $_GET["nameB"];
$roleB = $_GET["roleB"];
$get = $_GET["get123"];
$accept = $_GET["accept"];

$sql="SELECT * FROM tbl_rating WHERE NameB='$nameB' and RoleB='$roleB' and Get='$get' and Accept='$accept'";
$result=mysql_query($sql);


$rows = array();

//retrieve and print every record
while($r = mysql_fetch_assoc($result)){
    // $rows[] = $r; has the same effect, without the superfluous data attribute
    $rows[] = array('data' => $r);
}

// now all the rows have been fetched, it can be encoded
//echo json_encode($rows);

$data = json_encode($rows);
echo $_GET['jsoncallback'] . '(' . $data . ');';
?>

URL が次のようになっている理由がわかりません Request URL: http://mydomain.com/check.php?callback=jsoncallback&nameB=tutorB&roleB=Tutor&get123=1&accept=0&_=1363710513593

最後のパラメータ&_=1363710513593が何であるかわかりませんか?

しかし、上記の文字列を返すことができます

それはjqueryのバージョンに関連していますか?私はjquery-1.9.1.min.jsを使用しました

4

3 に答える 3

3

ajax 設定オブジェクトでコールバック名を指定する必要があります (現在は「?」と呼ばれています)。これがどのように機能するかについては、http://api.jquery.com/jQuery.ajax/を参照してください。設定オブジェクトで「jsonp」を検索します。また、PHP コードでそのコールバック名を取得し、それを応答で返す必要があります。これにより、その関数がクライアントに受信されたときに実行されます。例: jsoncallback(YOURJSONDATA)。

http://api.jquery.com/jQuery.ajax/から貼り付け

jsonp タイプ: 文字列 jsonp リクエストでコールバック関数名をオーバーライドします。この値は、「callback=?」で「callback」の代わりに使用されます。URL のクエリ文字列の一部。したがって、 {jsonp:'onJSONPLoad'} は 'onJSONPLoad=?' になります。サーバーに渡されます。jQuery 1.5 の時点で、jsonp オプションを false に設定すると、jQuery が「?callback」文字列を URL に追加したり、「=?」を使用しようとしたりするのを防ぐことができます。変身のために。この場合、jsonpCallback 設定も明示的に設定する必要があります。たとえば、{ jsonp: false, jsonpCallback: "callbackName" }

于 2013-03-19T15:17:52.343 に答える
1

更新: サービスが適切な jsonp ペイロードを返していないことを示しています。渡されたコールバック名を使用するように修正してくださいmycallback。jsonp コールバックとして渡すと、次の応答が得られます。

 mycallback([{"data":{"Rate":"","RoleA":"Student","NameA":"student","RoleB":"Tutor","NameB"‌​:"tutorB","Give":"0","Get":"1","Accept":"0"}}]); 

更新 2: &_=1363710513593- クライアントでの jsonp の処理方法により、対応する jsonp リクエストを jquery が把握できるようにするために、タイムスタンプがリクエストに追加されます (つまり、レスポンスはテキストとして送信され、本文に埋め込まれます)。

アクセスしている json サービスは jsonp をサポートしているため、$.ajaxjsonp リクエストを実行するように構成し、json コールバック名を jsoncallback に変更する必要があります

http://api.jquery.com/jQuery.ajax/

$.ajax({
                type: 'GET',
                dataType : 'jsonp',
                jsonpCallback : 'jsoncallback',
                data: 
                {

                        nameB:    nameB,
                        roleB:    roleB,
                        get123:   get123,
                        accept:   accept
                },
                url: 'http://mydomain.com/check.php',
                success: function(data){
                    alert(data[0].data.RoleA);
                 }       
                },
                error: function(){
                    alert('There was an error.');
                }
            });

            //return false;
        });
于 2013-03-19T15:15:00.397 に答える
1

サーバーが jsonp を再試行しようとしているようです。追加してみる

dataType: 'jsonp'

ajax リクエストに jsoncallback=? をドロップします。パラメータ

例えば

 $.ajax({
                type: 'GET',
                dataType: 'jsonp',
                data: 
                {

                        //nameB:    nameB,
                        //roleB:    roleB,
                        //get123:   get123,
                        //accept:   accept
                },
                url: 'http://mydomain.com/check.php?nameB=tutorB&roleB=Tutor&get123=1&accept=0&',
                success: function(data){
                    alert(data[0].data.RoleA);     
                },
                error: function(){
                    alert('There was an error.');
                }
            });

            //return false;
        });
于 2013-03-19T15:15:40.763 に答える