2011-08-12 5 views
1

다음은 지금까지 내가 가지고있는 것입니다 :Ajax 응답을 DOM에 주입하기 전에 어떻게 대응할 수 있습니까?

$(function() { 
    dataValModify('body'); 

    $('body').bind('ajaxSuccess', function (e, xhr, settings) { 
     dataValModify(xhr.responseText); 
    }); 
}); 

function dataValModify(elem) { 
    // Code to modify elements within the response. 
} 

DOM에 주입되기 전에 어떻게 Ajax 응답을 받아서 수정할 수 있습니까? 이전에는 ajaxComplete를 바인딩하고 삽입 후 DOM을 직접 수정했지만 대신 응답을 수정하고 싶습니다. Ajax 응답에서 요소를 찾고이를 사용하여 DOM을 수정하는 것은 많은 의미가 있다고 생각하지 않습니다. 내 기능에 xhr.responseText를 보내어 나머지 부분에 수정 사항을 다시 적용하지 않도록합니다.이 부분은 이미 Ajax 호출 시간으로 수정되었을 것입니다. 또한, 거기에 xhr.responseText보다 나은 뭔가가 있나요? xhr.responseHTML을 사용할 수 없습니다.

편집 : 지금 MVC 부분보기를 반환하는 간단한 테스트 Ajax 호출을 사용하고 있습니다 :

$('#ajaxTest').load('<MVC Route>') 

답변

2

, 그들이

  • 비동기 HTTP 요청을 만들어 일부를 가져옵니다. HTML
  • 는 ID와 요소에 수정 된 HTML을 삽입 dataValModify() 함수를 사용하여 반환 된 HTML을 수정합니다 'ajaxTest'당신이 할 필요가처럼 나에게 소리

그럼 경우 당신이 존재 즉 $(elem).load()

에서 사용하는 것보다 낮은 수준의 아약스 호출은 본질적으로 .load()에 대한 호출은 "someContent"는 HTTP 요청에서에서 responseText입니다 $(elem).html(someContent)의 호출에 의해 다음 $.get()에 대한 래퍼입니다. HTML이 이미 주입 된 ajaxComplete``당시

$.ajax({ 
    type: "GET", 
    url: "<MVC Route>", 
    dataType: "html", 
    success: function(jqXHR, textStatus, errorThrown){ 

    // Your HTTP call was successful but nothing else has happened with the response yet 
    // Therefore you can now do whatever you want with the it... 

    // First modify the HTML using the dataValModify function 
    // Assumption being that your function returns the modified HTML string 
    var myModifiedHTML = dataValModify(jqXHR.responseText); 

    // Inject the modified HTML 
    $('#ajaxTest').html(myModifiedHTML); 
    } 
}); 
+0

. 나는 그럴지도 모른다고 두려워했다! 문제는 내가 프레임 워크에서 작업 중이므로 개발자가 HTML을 수정해야하는 호출을하도록 요구할 수 없으며 "자동"이어야한다는 것입니다. 나는'ajaxComplete' 후에 DOM을 수정하여 그대로 작동 시켰지만 응답을 수정하는 것을 선호하지는 않습니다. 답변 주셔서 감사합니다! – Brandon

0

당신은 responseHTML 자체를 수정하는 ajaxComplete를 사용할 수 있습니다.

$('body').ajaxComplete(function(e, xhr, settings) { 
     dataValModify(xhr.responseHTML); 
}); 

업데이트 : 나는 그것을 시도하지 않은,하지만 도움이 될 :

$.ajaxSetup({ 
    converters: { 
    "text html": function(textValue) { 
     if (valid(textValue)) { 
     // Some parsing logic here 
     return dataValModify(textValue); 
     } else { 
     // This will notify a parsererror for current request 
     throw exceptionObject; 
     } 
    } 
    } 
}); 
여기

더 많은 정보

: 내가 제대로 귀하의 요구 사항을 이해하고있어 경우 http://api.jquery.com/extending-ajax/

+0

:

따라서 당신이이 DOM에 주입되기 전에 응답을 수정하려면, 당신은 다음과 같은 일을 할 수 있습니다. 또한,'xhr.responseHTML'은'ajaxSuccess'와'ajaxComplete' 둘다'undefined'를 리턴합니다. – Brandon

+0

'ajax' 호출 코드를 게시 할 수 있습니까? – Mrchief

+0

수정 사항으로 추가했습니다. – Brandon

관련 문제