2009-04-20 25 views
18

jQueryでgetJSON関数を使用してデータをインポートし、コールバック関数をトリガーしようとしています。コールバック関数は実行されません。しかし、get関数で同じことを試してもうまくいきます。不思議なことに、型として "json"を渡してもget関数で動作します。なぜこうなった?これは、限り、それは同じドメイン上にあるとして、関係なく、私がアクセスどんなURL起こらないように思わjQueryでgetJSON関数を使用しているときにコールバック関数が機能しない

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html><head> 
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'> 
<title>ajax test</title> 
<script type="text/javascript" src="/jquery-1.3.2.min.js"></script> 
</head> 
<body> 
<input type="button" id="test1" value="get"> 
<input type="button" id="test2" value="getJSON"> 
<input type="button" id="test3" value="get with json type"> 
<script type="text/javascript"> 
$("#test1").click(function() { 
    $.get("index.html", 
     function(response) { 
      alert('hi'); 
      //works 
     } 
    ) 
}); 

$("#test2").click(function() { 
    $.getJSON("index.html", 
     function(response) { 
      alert('hi'); 
      //doesn't work 
     } 
    ) 
}); 

$("#test3").click(function() { 
    $.get("index.html", 
     function(response) { 
      alert('hi'); 
      //works 
     }, 
     "json" 
    ) 
}); 
</script> 
</body></html> 

:私は、Firefox 3とIE 7で次のファイルをテストしました。私はいくつかのデータを渡そうとしましたが、違いはありません。

私は3番目のテスト関数のようにget関数を使用して問題を回避できますが、なぜこれが起こっているのか不思議です。

ここにはsimilar questionが尋ねられますが、私の質問には答えられませんでした。

+0

jsonがひどく形成されている可能性はありますか? – karim79

+0

index.htmlには何がありますか? – grammar31

+0

多分私はもっとはっきりしていたはずです。 index.htmlは上記のファイルです。私はドキュメント自体にアクセスしようとしていますが、これは最も有用なものではありません。私は単純で便利なので、そこに置いただけです。繰り返しますが、私がURLのために置いたものは重要ではないようです。 jsonは有効である必要がありますか? –

答えて

24

jsonが有効である必要があります。それ以外の場合、コールバックは起動しません。あなたはgetJSON呼び出したときに、表面の下

+0

ありがとうございました。 –

+0

FirefoxとIEが無効なJSONと違って反応するのは当然です –

+5

これは信じられないようなものの1つです。なぜ静かに失敗するのでしょうか?しかしそれは絶対に真実です。 http://www.jsonlint.com/は良いバリデータです。 –

0

が、これは何が起こっているのかである:

// ~ line 3216 
getJSON: function(url, data, callback) { 
    return jQuery.get(url, data, callback, "json"); 
}, // ... rest of jQuery core 

だから、発射からのコールバックを防止し、いくつかの他の事がなければならない...

私がすることから始めます** alert ** 異なるコールバックごとに何か( 'hi'だけではない)があるので、どちらが失敗/成功しているかわかります。 (これはあなたの例のようにgetJSON経由でHTMLを取得することはできません意味)getJSON仕事をするための

0

数多くの他の人が述べたように、あなたは有効なJSONを必要とする(すなわちhttp://json.org/のルールに準拠しています)。

最終テストの理由は、最後のパラメータ "json"が "タイプ"として解釈されないためです。以下は動作しないため:私は整形JSONなどを有しているにも関わらず、同じ問題を持っていた

$("#test3").click(function() { 
    $.get("index.html", 
     '', 
     function(response) { 
       alert('hi'); 
       //works 
     }, 
     "json" 
    ) 
}); 
0

私は自分のWebサービスを照会し、応答を取得することができた、しかし、私のコールバック関数は、焼成ませんでした。ネットを駆け抜けた後、私はアプリがいくつかのクロスドメインコールを実行してから 'jsonp'を使用して提案し、さらに 'コールバック'を追加しました。私のURLに。これはうまくいきませんでしたが、返されたJSONのコールバックを含むと私の問題が解決しました。

//server side json formed somewhere up here 
String data = callback + "("+ json +")" ; 

この起因する応答が「jsonp1280403476086([{"Name":"Jack Sparrow」jQueryのは問題がないように見えたので、私に死亡したことはありません のようなものがある:以下のコードは、私が何を意味するかを説明します。

これが役に立ちます。

4

$ .getJSON()この方法はJSONPであるので、それを変更:jsonp1291077863309:

$("#test2").click(function() { 
    $.getJSON("index.html?callback=?", 
     function(response) { 
       alert('hi'); 
     } 
    ) 
}); 

サーバーのようなものでいっぱいのparamコールバックを受け取ります。 レスポンスライトバックコールバック関数jsonp1291077863309(PUT_JSON_HERE)。

0

MVC2で代わり$.getJSON()の使用$.post、あなたがAllowGetJsonRequestBehaviorを設定してください$.get$.getJSONを使用したりしている場合。それ以外の場合は、HTMLエラーが返され、要求者はコールバックをトリガーしません。

3

右! 2日後、サーバーから正しく構成されたJSon文字列を受け入れるように$.getJSONにしようと狂ってしまったが、問題は実際にサーバー上にあった! Carl_Plattの言うとおり、json出力(PHPの$_GET['callback'])にURLパラメータとして受け取ったコールバック値を前置する必要があります。これについては、JSON-P出力と呼ばれています。

手に、ここで彼らはPHPで解決策を示しページ:

http://1080d.com/lang/en-us/2009/10/converting-php-to-jsonp-with-json_encode/

そして、あなたはcallback=?パラメータを呼び出すURLに追加する(本当に重要)覚えて! (呼び出すURLが実行中のjqueryスクリプトを提供している同じサーバにない場合にのみ必要です)...

JQueryは自動的に '?'を置き換えます。それをサーバーに送信する前に便利な値を指定してください。どの値を使用するのか心配する必要はありません。サーバーが適切な仕事をするならば、それはすべてあなたのためにシームレスになるでしょう:-)

希望します!

+0

ありがとうございます!幸いにも私にとっては数日間は試していませんが、少なくとも2時間はかかりました。これを修正するためには、これが本当に必要でした! – Tarka

0

コントローラーのJsonResultメソッドの上に[HttpPost]が表示されていないことを確認してください。これは.getJSON呼び出しにデータを返しません。

関連する問題