2012-08-02 1 views
2

나는이 콜백을 가지고PHP 최우선 AJAX POST 요청

$('#tagList').tagit({ 
      //Every new dag will be pushed in the list array 
      tagsChanged: function(tagValue,action,element){ 
       list.push(tagValue); 
       $.ajax({ 
        url: "dostuff.php", 
        type: "POST", 
        data:{ items:list.join("::")}, 
        success: function(data){ 
         $('#wrap').append(data); 
        } 
       }); 
      } 
     }); 

그 때마다 내가 태그 새로 추가 된 태그가 배열에 밀려되며, 그 후에는 만들 것를 추가로 무엇을 AJAX 게시물 요청.

그리고 난 여기이 필드

<form method = "POST" action = "demo3.php"> 
News Title <input id = "news_title" type = "text" name = "news_title" /><br> 
    <label>Insert Some tags </label> 
    <ul id="tagList" data-name="demo2"> 
    </ul> 
     <input type = "submit" name = "submit" id = "submit" value = "Post News" /> 
</div> 
</form> 

을 가지고 있고 클릭 할 때 (이것은 AJAX 요청마다 새 태그에서 만든 (그것은 기본적 페이지를 다시로드)를 $ _POST [ '항목'] 제출 추가됨)이 POST 전역 배열에서 지워지거나 제거됩니다. 따라서 $ _POST 전역 배열을 비워 두십시오.

어쨌든 나는이 두 가지를 병합 할 수 있습니까? 또는 어쨌든 PHP 재정의하자 또는 내 쿼리에 대한 항목을 필요로 할 것이기 때문에?를 $_POST['items']를 제거하지

너희들이 관심이 있다면 여기에 내 모든 코드의 내가

tagit라는 플러그인을 사용하고 또한

<!doctype html> 
<html> 
<head> 
    <script src="demo/js/jquery.1.7.2.min.js"></script> 
    <script src="demo/js/jquery-ui.1.8.20.min.js"></script> 
    <script src="js/tagit.js"></script> 
    <link rel="stylesheet" type="text/css" href="css/tagit-stylish-yellow.css"> 
    <script> 
    $(document).ready(function() { 
    var list = new Array(); 
     $('#tagList').tagit({ 
      //Every new dag will be pushed in the list array 
      tagsChanged: function(tagValue,action,element){ 
       list.push(tagValue); 
       $.ajax({ 
        url: "dostuff.php", 
        type: "POST", 
        data:{ items:list.join("::")}, 
        success: function(data){ 
         $('#wrap').append(data); 
        } 
       }); 
      } 
     }); 
    }); 
    </script> 
</head> 
<body> 

<div id="wrap"> 
<div class="box"> 
<button class = "viewTags">View Tags</button> 
<form method = "POST" action = "demo3.php"> 
News Title <input id = "news_title" type = "text" name = "news_title" /><br> 
    <label>Insert Some tags </label> 
    <ul id="tagList" data-name="demo2"> 
    </ul> 
     <input type = "submit" name = "submit" id = "submit" value = "Post News" /> 
</div> 
</form> 
</div> 
</body> 
</html> 

및 여기 dostuff. PHP

<?php 

     $lis = $_POST['items']; 
     $liarray = explode("::", $lis); 
     print_r($liarray); 
     print_r($_POST); 
?> 
+0

PHP는 $ _POST를 "오버라이드"하지 않습니다. $ _POST에 들어간 것은 PHP가받은 것입니다. $ _POST가 비어 있으면 아무것도 보내지 않았거나 형식이 잘못되었습니다. –

+0

오우 알겠습니다. 어떻게 내가 아약스와 PHP에 의해받은 POST에 의해 만들어진 POST 요청을 병합하겠습니까? 왜냐하면 나는 둘 다를 필요로 할 것이기 때문이다. – user962206

+2

그건 말이되지 않습니다. 당신은 "내가 할머니에게서받은 선물을 내 할머니와 어떻게 병합 할까?"하고 묻고있다. 당신의 코드가 묶여 있지 않다면, JS 코드에 의해 시작된 하나의 단일 HTTP 요청이있을 것이고, 서버 측 PHP 스크립트에 하나의 단일 게시물을 수행 할 것이다. –

답변

4

PHP 처리 요청은 모든 요청이 다른 모든 요청과 완전히 분리된다는 것입니다.이 요청은 공유 없음 아키텍처라고도합니다. 이는 <form>에서 demo3.php으로 생성 된 요청이 ajax가 dostuff.php으로 보낸 다른 요청을 알지 못하는 이유입니다. 이것은 반드시 PHP가 특정 일 필요는 없습니다. 왜냐하면 그 밑에있는 HTTP protocol이 무국적이기 때문입니다.

<form>이 제출 될 때 생성 된 요청에 태그를 포함하려면 해당 값을 양식에 추가해야합니다. 매개 변수 (item 기본값)을 itemName의 필드 (기본값으로 호출되는 것을

  • fieldName 컨트롤이라는 것을

    1. itemName 컨트롤 :이 경우, tagit 라이브러리는 두 개의 설정 옵션으로 제어 방식으로 구축했다 tags)

    당신이 스타일없이이 같은 플러그인 (demo) 초기화하는 경우 :

    $('#tagList').tagit({ 
        itemName: 'article', 
        fieldName: 'tags' 
    }); 
    

    제출시 php로 전송 된 매개 변수는 $_POST['article']['tags']이어야하며 생성 된 매개 변수 이름은 article[tags][]입니다. 플러그인의 demos을 참조하십시오. (페이지 소스에는 javasript 예제가 멋지게 포매팅되어있다.) 기본적으로 모든 추가 콜백 또는 구성없이 $('#tagList').tagit();을 호출하면 작동합니다.

    이것은 firebug의 넷 패널에 표시되는 방법입니다 (demo4는 신경 쓰지 마십시오).JQuery와 UI를 호출하여합니다 (assignedTags 방법을 사용

    $('form').on('submit', function(){ 
        var $form = $(this), 
         tags = $('#tagList').tagit('assignedTags'); // see the docs https://github.com/aehlke/tag-it/blob/master/README.markdown#assignedtags 
        $.each(tags, function(i, tag){ 
         $('<input type="hidden" name="tags[]">').attr('value', tag).appendTo($form); // using jquery to create new elements 
        }); 
    }); 
    

    : 당신은 당신이이 같은 <form>submit 이벤트에 연결할 수 있습니다 수동으로 수행 할 경우 PHP는 shot of firebug net panel after hitting submit


    )이 beeing는하지 스키마)를 사용하면 태그 이름을 가져올 수 있으며 <form>을 제출하기 직전에 새로운 숨겨진 입력을 추가하기 만하면됩니다. ::도 상상할 수있는 문자열을 포함 할 수 있다면이 방법을 함께 결합하는 것은 나쁜 생각 일 수 있습니다.

    예에서 각 태그에 별도의 입력을 사용 했으므로 demo3.php에서 배열로 도착합니다 (이름을 []으로 끝내면 php가됩니다).

  • +0

    와우 태그가 추가되었습니다! 하지만 그것은 "Array ([0] => [object HTMLUListElement])"라고 덧붙였다. – user962206

    +0

    나는 혼란 스럽다. – complex857

    +0

    양식을 제출 한 직후 PHP r에서 print_r을 사용했습니다. [0] => [[0] => [object HTMLUListElement]))의 값을 어떻게 보여줄 것인가? [News_title] => [제출] => object HTMLUListElement] – user962206