アップデートIV/現在のステータス:ファイルの文字エンコードは問題なく、問題の原因ではないことを別の質問で確認しました。別のサーバーに対してもテストしましたが、エラーが引き続き発生します。ただし、ローカルホストに対しては機能します。 要約すると、JSONP呼び出しはローカルホストに対して機能しますが、外部ドメインに対して実行すると、サーバーからの応答は空になります(ヘッダーなし/ http応答コードなし)。要求されたURLをコピーしてブラウザーに直接挿入すると、正しい形式(utf-8 / json)で出力が正しくなります。
フィドル: http: //jsfiddle.net/5SJvp/1/
アップデートIII:ローカルホストで正常に動作するようになりました。ただし、本番ドメインに対してまったく同じコード(クライアントとサーバーの両方)を使用しても、失敗します。サーバーからの応答は「空」です。これは、httpステータスコードを返さないことを意味します。
アップデートII:さらにデバッグを行った後、応答にhttpステータスコードが含まれていないことに気付きました。これがおそらく私の問題の原因ですか?これはサーバー側に何か問題があることを意味していると思いますが、私は一生どこにいるのかわかりません。
更新I:要求するjQueryからの切り取りが停止しているようです。
// Do send the request
// This may raise an exception which is actually
// handled in jQuery.ajax (so no try/catch here)
xhr.send( ( s.hasContent && s.data ) || null );
Params(Firebugから)
_ 1356655864905
callback jQuery18308375673194150332_1356655863817
p 0522
pl 12
s false
secret ##############################
u request12341299
リクエスト(Firebugから)
Accept text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language nb-no,nb;q=0.9,no-no;q=0.8,no;q=0.6,nn-no;q=0.5,nn;q=0.4,en-us;q=0.3,en;q=0.1
Connection keep-alive
Host localhost:8888
Referer http://localhost:8888/popup.html
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0
X-Requested-With XMLHttpRequest
元の質問:
私は一般的な問題のように思われることに苦労していますが、まだ解決策を見つけていません。jQueryを使用して非常に単純なjsonp呼び出しを実行しようとしています。問題は、a)何も起こらないか、b)サーバーからの応答が空であるということです。
$.ajaxメソッドと$.getJSONメソッドの両方を使用して、いくつかの異なるアプローチを試しました。どちらも同じ誤った結果を生成します。以下のコードを使用しても何も起こりません。Chromeデバッガーを使用すると、メソッドの途中で実行が停止するだけであることがわかります。ただし、Wiresharkを使用すると、クライアントが3ウェイハンドシェイクを実行し、データ送信の準備をしていることがわかります。これは失敗します。
callback =を削除した場合?実行されますが、応答の形式が正しくありません(または、Firebugで赤い線でマークされた応答しか表示されないため、少なくともそう思います)。
$.ajax({
url: "http://mydomain.com/asd.php", //"http://localhost:8888/index.php",
dataType: 'jsonp',
type: 'GET',
data: {p:p, u:u, s:symbols, pl:pl, secret:secret},
contentType: "application/json; charset=utf-8",
async: false,
success: function(data){
console.log("What " + data.test);
},
error: function(data){
console.log("failed for some reason");
}
});
サーバーコード($ callback = $ _GET ["callback"]
<?php header('content-type: application/json; charset=utf-8');
.
.
.
$data = array
(
"message" => $message,
"status" => $statuscode,
"length" => strlen($message)
);
echo $callback . '('.json_encode($data) .')';
exit;
?>
これは、手動で入力されたサーバーの応答です。
funcName({"message":"!0b7(cb6Gv40","status":"OK","length":12})