2010-07-15 1 views
1

아마도 더 많은 추측 성격의 질문입니다. 나는 최근에 내 웹 애플 리케이션에서 모든 아약스를 처리하기 위해 jquery에 무거워졌다.스크립트를 사용하면 jQuery의 .load() 메소드에 부울 '응답'을 제공합니다.

지금 mod_rewrite를 많이 사용하는 입찰 시스템을 구축하고 있습니다. jQuery를 사용하여 확인 대화 상자에 Ajax 요청을 보내 사용자의 미리 채권 중 일부를 입찰에 지출합니다. 지출 할 아약스 요청은 비용을 포스트 매개 변수로 PHP 컨트롤러로 보낸 다음 사용자 크레디트를 소비 한 다음 결과를 에코 (echos) 한 다음 jQuery가 다시 문서에 저장합니다.

잘 작동하지만 사용자가 크레딧이 충분하지 않은 경우 jQuery가 구매 거절을 처리하는 더 좋은 방법이 있는지 궁금합니다. 지금 나는 예금 페이지를 만들기위한 링크가있는이 메시지를 표시하는 메아리로 응답하는 PHP를 가지고 있지만 ... 차라리 자동으로 리디렉션이 발생합니다.

.load가 끝나기 전에 내 jQuery 스크립트가 성공 또는 실패 여부를 알 수있는 방법이 있습니까? 실패한 경우 리디렉션이 필요합니까? HTTP 헤더가 처리를 결정할 가능성이 있습니까? 내가 생각할 수있는 유일한 방법은 true 또는 false를 .load() 후에 콜백에 체크인하고 false의 경우 리디렉션을 수행하는 html 요소에 배치하는 것입니다.

설명 길이 때문에 죄송합니다. 콜백 함수가 같은 경우

답변

1

는 요청을 완벽 최대 제어 할 낮은 수준 $.ajax 전화를 사용합니다. 이상적으로, 성공 2xx 응답을 보내는 대신 자동으로 오류 콜백으로 전송 될 오류 응답을 보냅니다.

$.ajax({ 
    url: '..', 
    success: function() { 
     // if it gets here, then assume credits were used 
    }, 
    error: function() { 
     // some error happened 
     // if error was about insufficient funds, then redirect 
    } 
}); 

서버에서 지금 당장 성공 사례를 보내주십시오. 그러나 오류의 경우 응답 헤더를 변경하고 오류가 무엇인지 나타내는 JSON 객체 또는 일반 텍스트를 보냅니다. 그리고 당신이 찾고있는 것을 정확하게 찾을 수있는 헤더가 있습니다. 그것은 402 - Payment Required입니다 :)

header('HTTP/1.1 402 Payment Required'); 

더 세부 응답으로 JSON 개체를 보내 업데이트 된 의견에 대한

{ 
    status: 'error', 
    reason: 'Insufficient Funds', 
    balance: '$2.78', 
    amountRequested: '$3.50' 
} 

, 당신은 (글로벌 변수보다 더 :) 가 외부를 가정 클로저를 사용할 필요가 함수는 요소 이름/ID를 가져오고 성공 콜백의 클로저를 통해 해당 값을 래핑합니다. 이것이 의도 한 것이 아닌지 알려주십시오.

function makeAJAXCall(elementName) { 
    $.ajax({ 
     success: function(...) { 
      // elementName is available here through a closure 
      alert(elementName); 
     } 
    });  
} 
+0

안내에 감사드립니다. 이것은 매력처럼 작동하고 오류 처리 중 일부를 도왔습니다! – DeaconDesperado

+0

@DeaconDesperado - 대단히 영광입니다. 나는 그것이 도움이 되었기 때문에 기쁩니다 :) – Anurag

+0

그냥 한 가지 질문으로, 당신이 설명한대로 모든 것을 구조화했습니다. 콜백 함수에 성공할 경우 업데이트 할 div를 알 수 있도록 콜백에 추가 인수를 전달할 수 있습니까? – DeaconDesperado

0

"기능 (데이터) {"당신은 "NSF"를 반환하거나 같은 것을, 단순히 'NSF'에서 '데이터'를 비교하고에서는 window.location

로 리디렉션을 할 수
2

모든 입찰 시도가 다른 곳으로 가야 할 경우, 왜 AJAX를 사용해야합니까?

어쨌든 jQuery's API documentation을 보면로드() 만 사용할 수있는 것은 아닙니다. 대부분의 버전은 ajax()의 단순화 된 버전입니다. 이 도구를 사용하면 거기에서 가능한 모든 이벤트를 제어 할 수 있습니다. HTTP 헤더를 망칠 필요가 없습니다!

JSON 개체를 반환하도록 서버 측 스크립트를 다시 디자인하는 것이 좋습니다. 그렇다면, 당신은 응답의 모든 다른 유형을 다시 보낼 수 있습니다

{ 
    biddingSuccessful: true, 
    linkToDepositPage: "http://example.com", 
    textToDisplay: "Your bidding was successful" 
} 
+0

이것은 가장 적합한 해결책입니다. – jarcoal

관련 문제