좋아,이 사람이 나를 미치게 만듭니다. 우선, 모든 것이 제 개발 환경에서 잘 작동합니다. 하지만 프로덕션 환경에서는 여러 브라우저에서 일관성이 없습니다. 때로는 효과가 있고 때로는 그렇지 않습니다. 레일즈 3.1과 jQuery 1.8.2를 사용하고 있습니다. 나는 jQuery 1.4.1을 사용하고 있었고 그때도 작동하지 않았다.레일 아약스 게시물이 일관되게 작동하지 않습니다.
사용자가 "저장"버튼을 클릭하고 클라이언트가 JSON 형식의 데이터를 여러 개의 새로운 "응답"항목을 만드는 데 사용하는 레일로 보내고 사용자를 컨트롤러 "표시"작업으로 리디렉션합니다. (사용자가 설문에 응답 한 다음 모든 사용자에 대한 결과를 확인합니다). 여기
내보기 (answer.html)에서 관련 코드입니다 ('. save_button')$.ajaxSetup({
'beforeSend': function(xhr) {
xhr.setRequestHeader("Accept", "text/javascript")
}
});
$(document).ajaxSend(function(e, xhr, options) {
var token = $("meta[name='csrf-token']").attr("content");
xhr.setRequestHeader("X-CSRF-Token", token);
});
var plot;
var dataseries = [[[null,null]],[[null,null]],[[null,null]],[[null,null]],[[null,null]],[[null,null]],[[null,null]],[[null,null]],[[null,null]]];
$(document).ready(function(){
$('.save_button').click(function(event){
event.preventDefault();
var numItems = dataseries.length;
var item;
var sequence;
var question = <%[email protected]%>;
var dataArray = new Array();
for (i=0;i<numItems;i++){
var requestObj = {
question_id: "<%[email protected]%>",
user_id: "<%= @user %>",
}
item = $('.item_list li[data-seq='+i+']').attr('id');
requestObj["item_id"] = item;
requestObj["x"]= dataseries[i][0][0];
requestObj["y"]= dataseries[i][0][1];
if (requestObj["item_id"]>0 && requestObj["x"]!=null && requestObj["y"]!=null){
dataArray.push(requestObj);
}
}
var dataString = JSON.stringify(dataArray);
var a = $.ajax({
url: "/responses/batchCreate",
data: dataString,
type: "POST",
dataType: 'json',
success: function(data, textStatus, jqXHR) {
},
error: function(jqXHR, textStatus, errorThrown) {
alert('error:');
},
headers: {
'X-CSRF-Token': '<%= form_authenticity_token.to_s %>'
}
})
window.location.replace("<%=question_path(@question)%>");
});
$ (함수 (이벤트)마다 화재 "오류"콜백 불을 클릭합니다.. ! -마다 너무 시간,하지만 때로는 여기에
이 관련 컨트롤러 코드 작동 : 때때로 데이터가 새로운 응답이 내 DB에서 생성되어 저장됩니다def batchCreate
logger.info "RECEIVED AJAX DATA!!!!"
responses = ActiveSupport::JSON.decode(request.body.read)
responses.each do |resp|
if (resp["item_id"]!=:null && resp["x"]!=:null && resp["y"]!=:null)
@response = Response.new()
if resp["user_id"]!=""
@response.user_id=resp["user_id"];
else
u = User.where(:token => cookies[:user]).first
if u.nil?
u = User.create!(:email => "guest_#{Time.now.to_i}#{rand(99)}@example.com", :password => cookies[:user], :token => cookies[:user])
@response.user_id=u.id
else
@response.user_id = u.id
end
end
@response.question_id=resp["question_id"].to_i
@response.item_id = resp["item_id"].to_i
@response.x = resp["x"].to_i
@response.y = resp["y"].to_i
@response.save
end
end
respond_to do |format|
format.html { redirect_to @response, :notice => 'Question was successfully created.' }
format.json { render :json => response, :status => :created, :location => @response }
format.js
end
end
하고, 페이지는 show 액션로 리디렉션 . 다른 때에는 페이지를 다시로드하기 만하면됩니다. 이 경우 게시 데이터가 서버에 도달하지 못하는 것 같습니다. production.log에는 아무 것도 없습니다.
저는 Ajax에 대한 완전한 초보자이며 Rails에서 좀 더 유능한 사람입니다. 이 문제를 해결하기 시작하는 방법에 대해서도 귀하가 제공 할 수있는 통찰력은 대단히 감사하겠습니다. 고맙습니다.
답변 해 주셔서 감사합니다. 불행히도 여전히 작동하지 않습니다. 그리고 그런데 왜 자바 스크립트에 Ruby를 포함시키는 것이 좋은 생각이 아닌가? – MikeC
자바 스크립트에 Ruby 코드를 임베딩하면 커플 링이 생성되고 도메인 논리가 정적 인 캐시 가능 파일이 될 수 있으며, 솔루션의 범위도 제한됩니다. 예를 들어 사용한 코드 부분에서 루비가 임베디드되어 있으면 솔루션이 매우 구체적이며 (항상 질문 경로로 리디렉션되는 반면), 내 제안은 특정 URL과 결합되지 않습니다. 어떤 값의 href 속성을 가진 모든 타겟을 처리 할 수 있습니다. 지금 당면한 특정 문제에 대해서는 중요하지 않을 수도 있지만 결코 알 수 없습니다. –
지금까지 문제가있는 한, 내가 보여준 정보로 더 이상 진단 할 수 있는지 확실하지 않습니다. AJAX 요청 + 리로드는 확실히 문제 였지만 분명히 문제를 일으키는 문제는 아닙니다. –