2

以下は私のコードです:

     function jsonpCallback(response){
                    //JSON.stringify(response)
                    alert(response);
                }                
                $.ajax({
                    url: url,
                    dataType: 'jsonp',
                    error: function(xhr, status, error) {
                        alert(error);
                    },
                    success: function(data) {
                        alert(data);
                        jsonpCallback(data);
                    }
                });

ここで、私の url 変数は、次のデータを含むリンクであり、JSON 形式であることがわかっているとおりです。

[{"destination":"United States","destinationId":"46EA10FA8E00","city":"LosAngeles","state":"California","country":"United States"}] etc..

一連のデータを渡した後、jsonpCallback関数を呼び出したいです。しかし、 $.ajax の成功引数は関数を呼び出していないため、データを取得していません。しかし、デバッガー ウィンドウに応答が表示されているのに、なぜ $.ajax 関数が表示されないのでしょうか?

助けてください...事前に感謝します。

4

5 に答える 5

1

GET/POST呼び出しのタイプのajaxを渡してみてください。

$.ajax({
     type: "GET",
     url: url,
     dataType: 'jsonp',
     error: function(xhr, status, error) { alert(error); },
     success: function(data) {
         alert(data);
         jsonpCallback(data);
     }
});

 function jsonpCallback(response){
      //JSON.stringify(response)
      alert(response);
 }       
于 2012-05-23T12:05:56.243 に答える
1

データをロードしようとしている URL は JSONP をサポートしていないため、コールバックが呼び出されていません。

エンドポイントを所有している場合は、必ずコールバック GET パラメータを処理してください。PHP では、出力は次のようになります。

<?php 
echo $_GET['callback'].'('.json_encode($x).')';

これにより、結果が次のように変換されます。

jsonp2891037589102([{"destination":"United States","destinationId":"46EA10FA8E00","city":"LosAngeles","state":"California","country":"United States"}])

もちろん、コールバック名は、jQuery が自動的に生成するものによって異なります。

これは、JSONP が に新しい<script>タグを作成し<head>てブラウザに強制的にデータをロードさせることによって機能するために必要です。GETパラメータcallbackが処理されない (そして URL が JSONP 応答ではなく JSON 応答を返す) 場合、データはロードされますが、何にも割り当てられず、(コールバック経由で) 何にも転送されません。基本的に、データは失われます。

エンドポイントを変更しないと、その URL からデータをロードできません。

于 2012-05-23T12:19:17.890 に答える
0

サーバーがJSONP応答をレンダリングしないため、機能していません。JSON応答をレンダリングします。

JSONPが機能するには、サーバーはajaxリクエストによって送信されたjavascript関数を呼び出す必要があります。関数はjQueryによって生成されるため、心配する必要はありません。

ただし、サーバーはそれについて心配する必要があります。デフォルトでは、この関数の名前がcallback引数で渡されます。たとえば、サーバーへのURLはhttp://some.domain/ajax.php?callback=functionName(notice callback=functionName)になります。

したがって、サーバー側(ここではPHP)に次のようなものを実装する必要があります。

$callback = $_GET['callback'];
// Process the datas, bla bla bla
// And display the function that will be called
echo $callback, '(', $datas, ');';

返されたページはjavascriptで実行されるため、関数が呼び出され、jQueryがsuccess関数を呼び出します。

于 2012-05-23T12:22:51.710 に答える
0

最初に$.ajax関数を呼び出しているイベントを確認してください...

    <script type='text/javascript'>
    jQuery('#EnrollmentRoleId').change(function(){
alert("ajax is fired");
    $.ajax({
         type: "GET",
         url: url,
         dataType: 'jsonp',
         error: function(xhr, status, error) { alert(error); },
         success: function(data) {
             alert(data);
             jsonpCallback(data);
         }
    });
    });
     function jsonpCallback(response){
          //JSON.stringify(response)
          alert(response);
     }       

    </script>

2番目に置き換え$てみてくださいjQuery

競合エラーを考えている場合は、競合を与えないようにしてください..

jQuery ajax エラー コールバックが起動しない

function doJsonp()
{
alert("come to ajax");
    $.ajax({
        url: url,
        dataType: "jsonp",
        crossDomain: true,
        jsonpCallback:'blah',
        success: function() { console.log("success"); }, 
        error: function() { console.log("error"); } 
    });
}

次に、json データが有効かどうかを確認します。

ありがとう

于 2012-05-23T12:14:57.253 に答える
0

$.ajax について気付いた奇妙な点の 1 つは、コンテンツ タイプが正確に一致しない場合、成功とは見なされないことです。それをいじってみてください。successに変更complete(および引数を修正) すると、アラートが表示されますか?

于 2012-05-23T12:18:26.457 に答える