JavaScript Ajax呼び出し(jQuery.ajax)があり、成功コールバック関数を実行しません。
$.ajax({
url: target,
contentType: 'application/json; charset=utf-8',
type: 'POST',
// type: 'GET',
dataType: 'jsonp',
error: function (xhr, status) {
alert(status);
},
success: function (result) {
alert("Callback done!");
// grid.dataBind(result.results);
// grid.dataBind(result);
}
});
Firebugでは、リクエストが投稿され、jsonに関して正しい結果が期待どおりに返されることがわかりました。なにが問題ですか?
多くの場合、私は同様の問題に遭遇しましたが、ほとんどの場合、理由は不正なjsonでした。結果をテキストデータ型として取得して、これが問題かどうかを確認してください。
また、「&jsoncallback =?」などのパラメーターを使用しているかどうかを尋ねたいと思います。データ型は単純なjsonではなくjsonpであるため、URLで。
$.ajax
を使用したdataType: 'jsonp'
呼び出しは、次のシナリオで機能します。
これらの2つのケースに当てはまらない場合、クロスサイトXmlHttpRequest呼び出しを行うことができないため、何もできません。
これは古い質問ですが、私は人々がまだこれにぶつかっていると思います。
私はこれをしばらくの間戦ったが、最終的にはあきらめ、延期モデルに移行した。 (私はjQueryを十分に長い間使用してきたので、「古い」方法の習慣がまだありました...)遅延モデルに移行するとすぐに、物事が機能し始めました。古い方法がうまくいかなかった理由はわかりませんが、気にしません。 (この質問は、新しいモデルより前のものです。)
Asyncプロパティをfalseに設定する必要があります。
$.ajax({
url: target,
contentType: 'application/json; charset=utf-8',
type: 'POST',
// type: 'GET',
dataType: 'jsonp',
async = false,
error: function (xhr, status) {
alert(status);
},
success: function (result) {
alert("Callback done!");
// grid.dataBind(result.results);
// grid.dataBind(result);
}
});
これは同僚の1人に起こったばかりなので、ソリューションも追加すると思います。
Ajax呼び出しが行われ、Fiddlerで適切な応答が返されることは確認できました(ステータス200 /完全に有効なJSON)が、エラー、成功、または完全なコールバックにヒットすることはありません。 async:falseをajax呼び出しに追加すると機能しますが、実際には適切な解決策ではありませんでした。さらに、ajax呼び出しの直後に(async:falseを使用せずに)アラートを配置し、アラートが表示されてから数秒間待機すると、何らかの形でajaxコールバックが機能するようになります。本当に奇妙な...
結局のところ、ajax呼び出しを使用した関数はtype = "submit"の入力にバインドされていました。これがこの奇妙な動作の原因でした。入力をtype = "button"に変更すると修正されました。