programing

비AJAX jQuery POST 요청

bestprogram 2023. 10. 24. 21:30

비AJAX jQuery POST 요청

jQuery POST 기능을 사용하려고 하는데 AJAX 스타일로 요청을 처리하고 있습니다.내 말은 실제로 내가 지시하는 페이지로 가는 것이 아니라는 뜻입니다.

$("#see_comments").click(function() {
    $.post(
        "comments.php", 
        {aid: imgnum}, 
        function (data) {

        }
    );
});

이 기능은 댓글로 이동해야 합니다.원조 값이 수중에 있는 php 페이지.게시는 잘되지만 댓글로 리디렉션되지 않습니다.php.


@Doug Neiner 해명:

  1. 링크(이미지)가 15개 있습니다.링크를 클릭하면 자바스크립트가 로드됩니다.대본이 뭘 알아요?imgnum열었어요.이것.imgnum댓글로.php.저는 이 자바스크립트를 사용해야 하는데 다른 수단으로는 그 방법을 사용할 수 없습니다.자바스크립트는 필수 사항입니다.

  2. 방법이 지원 값을 성공적으로 게시합니다.근데 댓글로.php는 내가 그 값을 에코하려고 할 때 아무것도 표시되지 않습니다.

  3. 파이어버그를 사용하고 있습니다.콘솔에는 제가 (2) 단계에서 수행한 에코 요청이 성공적으로 표시됩니다.

당신이 무엇을 하려고 하는지는 알지만, 당신이 원하는 것은 아닙니다.

첫째, 서버에서 데이터를 변경하지 않는 한 a를 사용하지 마십시오.POST부탁한다.그냥 가지세요#see_comments보통 사람입니다<a href='/comments.php?aid=1'>...

사용해야 할 경우POST, 그런 다음 이 작업을 수행하여 페이지가 전화를 따르도록 하십시오.

$("#see_comments").click(function() {
  $('<form action="comments.php" method="POST">' + 
    '<input type="hidden" name="aid" value="' + imgnum + '">' +
    '</form>').submit();
});

이게 실제로 어떻게 작동하는지.

첫번째$.postAJAX 메서드일 이며 기존 메서드를 수행하는 데 사용할 수 없습니다.form당신이 설명하는 것처럼 제출하세요.따라서 값을 게시하고 새 페이지로 이동할 수 있도록 시뮬레이션해야 합니다.form포스트.

따라서 흐름은 다음과 같습니다.

  1. 이미지를 클릭하면 JS 코드가imgnum
  2. 그 다음에 누군가가 클릭을 합니다.#see_comments
  3. 우리는 임시적인 것을 만듭니다.form와 함께imgnum그 속에 숨은 분야로서 가치.
  4. 우리는 그 양식을 제출합니다. 그 양식은 가치를 게시하고 로딩합니다.comments.php페이지입니다.
  5. 당신의.comments.php페이지는 게시된 변수에 액세스할 수 있습니다(즉, PHP에서).$_POST['aid'])
$("#see_comments").click(function () {
    $('<form action="comments.php" method="POST"/>')
        .append($('<input type="hidden" name="aid">').val(imgnum))
        .appendTo($(document.body)) //it has to be added somewhere into the <body>
        .submit();
});

Doug Neiner의 솔루션은 정확할 뿐만 아니라 가장 포괄적으로 설명된 솔루션이지만, 한 가지 큰 문제가 있습니다. 크롬에서만 작동하는 것처럼 보인다는 것입니다.

나는 해결책을 찾으려고 한동안 안절부절못하다가 두 번째 답을 우연히 발견했습니다.유일한 차이점은 추가 코드입니다.appendTo($(document.body)). 그리고 파이어폭스에서 테스트해봤는데 매력적이었어요.파이어폭스와 IE는 DOM Body 어딘가에 임시 양식을 첨부해야 한다고 합니다.

Symfony2 프로젝트를 위해 이 구현을 해야 했습니다. 왜냐하면 내부에 경로 생성기가 있기 때문입니다..twig템플릿은 다음과만 작동합니다.GET매개 변수와 쿼리 문자열을 엉망으로 만드는 것은 앱의 보안을 파괴하고 있었습니다. (BTW, POST 매개 변수가 있는 페이지를 호출하기 위해 .twig 템플릿을 얻는 방법을 아는 사람이 있다면 댓글로 알려주세요.)

제 생각엔 당신이 요구하는 것은 'comments'로 가는 것 같습니다.php'와 postingaid가치 있게imgnum. 이 방법은 양식과 함께 이 값을 제출하는 것뿐입니다.

그러나 이 양식을 숨긴 상태로 만들고 jquery가 있는 곳에서 임의 클릭으로 제출할 수 있습니다.

html nequal(페이지의 아무 곳에나 배치):

<form id='see_comments_form' action='comments.php' action='POST'>
    <input id='see_comments_aid' type='hidden' name='aid' value=''>
</form>

js 필수:

$("#see_comments").click(function(){
    $('#see_comments_aid').val(imgnum);
    $('#see_comments_form').submit();
);

그러면 ' comments'로 리디렉션됩니다.php'와 적절한 값을 보냅니다.imgnum(다른 곳에서 얻은 것으로 추정됩니다.)

정말로.$.post()일부 데이터를 서버로 보냅니다.POST 요청을 처리하는 서버 사이드 코드에서 하지 않으면 리디렉션이 발생하지 않습니다.다음 두 가지 해결책을 제안할 수 있습니다.

  1. 댓글 페이지로 이동하시려면 JQuery post 대신 '앵커' 태그를 이용하시면 됩니다 -<a href="comments.php?aid=1">Show Comments</a>.
  2. 또는 JQuery를 진행하려면 다음 코드 스니펫을 사용할 수 있습니다.$(location).attr("href", "comments.php?aid=1");

정확하게 문제를 해결하지 못했습니다.이 문제를 해결할 수 있었습니다. 이 문제를 해결하기 위해 JS를 많이 수정해야 했지만, 이 문제의 핵심 문제는 이렇게 함으로써 해결되었습니다.

    $("#see_comments").attr({href: "comments.php?aid='"+imgnum+"'"});

@Doug Neiner가 처음에 제안한 대로 URL에 지원 값을 추가했습니다.더그, 수고 많으셨습니다.정말 감사합니다. +1 그리고 노력에 대한 답변을 받아들이겠습니다.

언급URL : https://stackoverflow.com/questions/2054705/non-ajax-jquery-post-request