<script>
$.ajaxSetup({contentType: 'application/json'});
function submit_data(f){
alert('submitting')
var data_string = $(f).serialize();
$.ajax({
url: "http://localhost:3000/application/1/contact_us.json?jsonpcallback=?"+data_string,
dataType: "jsonp",
type : 'post',
processData: false,
crossDomain: true,
contentType: "application/json",
jsonp: false,
jsonpcallback: result()
});
}
function result(){
alert('back in')
alert(data)
}
function jsonp1300279694167(){
alert('dhoom')
}
</script>
上記のスクリプトは、ドメイン内でクエリを実行し、フォーム内にデータを投稿しています。
すべてうまくいくようです。 JSONレスポンスは、Firebugコンソールに表示されます。私は応答を処理し、それに応じてステータスメッセージを表示したいと思います。私はそれをどのように達成すべきですか?クロスドメインの読み取りJSONレスポンス
UPDATE
私はT.J.により示唆されるように試してみましたCrowderしかし、まだ運がありません。変更されたコードはdata
と警告undefined
にアクセスしていない
function submit_data(f){
alert('submitting')
var data_string = $(f).serialize();
$.ajax({
url: "http://localhost:3000/application/1/contact_us.json?"+data_string,
dataType: "jsonp",
crossDomain: true,
success: handleSuccess()
});
}
function handleSuccess(data) {
alert("Call completed successfully");
alert(data);
}
これ以下の通りです。 success: handleSuccess()
からそれを渡そうとすると、エラーが発生し、httpリクエストでリダイレクトされます。
Ruby on Rails
アプリケーションから応答があります。ここで私は
def create
errors = ContactUsForm.validate_fields(params)
logger.info errors.inspect
if errors.blank?
respond_to do |format|
format.json {render :json => {:status => 'success'}.to_json}
end
else
respond_to do |format|
format.json {render :json => {:status => 'failure', :errors => errors}.to_json}
end
end
end
を打っています方法は、私はあなたが近くにいる私のレールのアプリで
ここにJSONP呼び出しのライブ例があります:http://jsbin.com/otehi4 –
私はほとんどすべてを試しましたが、まだ運がありません。 – Pravin
@Pravin:あなたはまだハンドラ関数名( 'success:handleSuccess()'の後に '()'を入れています。上の答えで述べたように、*はあなたの 'handleSuccess'関数を(ajax呼び出しの前に)直ちに呼び出し、その戻り値を' ajax'の 'success'オプションに割り当てます。関数を呼び出さずに関数を参照するには、 '()'をオフのままにします(例: 'success:handleSuccess')。 –