取得Ajax回傳值使用JQuery

今天遇到一個問題,分享一下給可能遇到這個問題的朋友

假如我在一個function裡面要使用AJAX去取得回傳的值再回傳,如下:

function get_init_item_json_data()
{
var d;

jQuery.ajax({
url: ‘/pages’,
type: ‘get’,
dataType: ‘json’,
success:function(data)
{
d = data;
}
});

return d;
}

但是此時會發現d其實undefined

後來發現因為AJAX是非同步處理造成的

這時改為

function get_init_item_json_data()
{
var d;

jQuery.ajax({
url: ‘/pages’,
type: ‘get’,
dataType: ‘json’,
async:false
success:function(data)
{
d = data;
}
});

return d;
}

這樣就可以了

Ruby on Rails Ajax 不成功

今天使用Ruby on Rails 去做AJAX 的呼叫

AJAX的Javascript那裡只是一個簡單的json轉值呼叫而已

$.post('/website_setting/step05', { json: json_string },
function(data){
alert(data);
}
);

但試了好久一直沒有成功!

後來檢查了幾個地方:

1. AJAX 路徑是否正確

2. ROR的 route 是否有設定

後來我透過Ruby on Rails的 development.log 去除錯,

看到了這段

Started POST “/website_setting/step05” for 127.0.0.1 at 2013-09-07 02:14:22 +0800
Processing by WebsiteSettingController#step05_update as */*
Parameters: {“json”=>”{\”0\”:\”關於我們\”}”}
Can’t verify CSRF token authenticity
Completed 422 Unprocessable Entity in 1ms

發現剛剛的1,2都是正確的

問題出在 “Can’t verify CSRF token authenticity”

後來找了資料後發現只要加上這段就可以了

$.ajaxSetup({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
});

還有要注意到在layout裡面要有這段語法   <%= csrf_meta_tags %>

這樣,上面那段js語法才可以取到值