2013-03-15 2 views
0

나는 Select2 3.3.1을 사용하고 있으며 이벤트에서 내 웹 사이트에서 사용할 태그를 만들고 삭제할 수있는 여러 텍스트 입력에서 변경된 요소에 액세스 할 수 있습니다. 이벤트 처리기에서 반환 된 객체를 반복하는 데 문제가 있습니다. 특히, 개별 태그에 액세스하기를 원하기 때문에이 작업을 수행하려고합니다. 이벤트 처리기 반환 매개 변수에는 태그가 추가되었는지 또는 제거되었는지에 따라 구성된 이러한 객체가 들어 있습니다. 그래서, 이것은 훌륭합니다. 하지만 내가 시도한 모든 것은 실패합니다.AJAX GET 요청을위한 JSON 문자열 구문 분석

.on("change", function(e) { 
    alert(JSON.stringify({val:e.val, added:e.added, removed:e.removed})); 
    var added = JSON.stringify({added:e.added}); 
    $.each(added, function(){ 
     $.ajax({ 
      url: '/db-interaction/tags.php', 
      data: { 
       'action': 'addtag', 
       'q': this 
      }, 
      type: 'get', 
      success: function(output) { 

      } 
     });    
    }); 

번째 행에 명령

상기

alert(JSON.stringify({val:e.val, added:e.added, removed:e.removed}));

디스플레이에 경고 문자열

{"val":["newtag"],"added":{"id":"newtag","count":"0"}}.

이 경우 'newtag'라는 단어를 태그로 추가했습니다. 이 내부 목록에서 이러한 항목을 반복 할 수 있기를 바랍니다.

아래와 같이 이중 중첩 루프를 시도했지만 동일한 오류가 발생합니다. JSON 문자열에 필요한 구조가 확실하지 않습니다.

$.each(added, function(){ 
     $.each(this, function(){ 

ajax 요청이 실행되지 않는 것 같지만 버그를 찾을 수 없습니다. 성공 함수가 실행되지 않고 방화 광 콘솔에 오류가 있습니다. jquery 스크립트를 가리키는 TypeError: invalid 'in' operand e이라고합니다. 내 버그 야. 아마 'e'라는 이벤트 핸들러 매개 변수를 처리하는 방식과 관련이 있을지 모르지만, 내가 뭘 잘못하고 있는지 알지 못합니다.

다음은 태그 스크립트입니다. FWIW, addNewTag() 메서드는 다른 사용 사례에서 작동합니다.

/** 
* Adds a new tag, increment uses_count if it already exists 
* 
* 
*/ 
public function addNewTag($name=NULL) 
{ 
    if ($name === NULL){ 
     if (isset($_POST['q'])) 
      $u = $_POST['q']; 
     else if (isset($_GET['q'])) 
      $u = $_GET['q']; 
    } 
    else{ 
     $u = $name; 
    } 

    $sql = "INSERT INTO tags(name,uses_count) VALUES (:term,1) 
      ON DUPLICATE KEY UPDATE uses_count=uses_count+1;"; 
    if($stmt = $this->_db->prepare($sql)) 
    { 
     $stmt->bindParam(":term", $u, PDO::PARAM_STR); 
     $stmt->execute(); 
     $stmt->closeCursor(); 
    } 

이 사람이 나를 도울 수 :

<?php 

session_start(); 

include_once "../inc/constants.inc.php"; 
include_once "../inc/class.tags.inc.php"; 
$tags = new Tags(); 

if (isset($_SESSION['LoggedIn']) && $_SESSION['LoggedIn']==1) 
{ 
    if(!empty($_POST['action'])) 
    { 
     switch($_POST['action']) 
     { 
      case 'addtag': 
       echo $tags->addNewTag(); 
       break; 
      case 'removetag': 
       echo $tags->removeTag(); 
       break; 
      case 'getalltags': 
       echo $tags->getAllTags(); 
      default: 
       break; 
     } 
    } 
    else if(!empty($_GET['action'])) 
    { 
     switch($_GET['action']) 
     { 
      case 'addtag': 
       echo $tags->addNewTag(); 
       break; 
      case 'removetag': 
       echo $tags->removeTag(); 
       break; 
      case 'getalltags': 
       echo $tags->getAllTags(); 
      default: 
       break; 
     } 
    } 
} 
else 
{ 
    header("Location: /"); 
    exit; 
} 

?> 

그리고 다른 경우에서 잘 작동 addNewTag() 메소드,

? 그것이 사용된다면, 내가 시도한 다른 것들과 왜 그들이 일하지 않았는지를 설명 할 수 있습니다.

+0

,'당신의 jQuery를위한 JSON에 PHP 배열을 구문 분석 –

+0

'var added = {JSON.stringify ({added : e.added});'문자열을 제공합니다. 객체가 필요합니다. var added = {added : e.added}; ' – Musa

답변

1

$.each(e.added, function(key, value){ 
    alert(key + ' - ' + value) 
    $.ajax({ 
     url: '/db-interaction/tags.php', 
     data: { 
      'action': 'addtag', 
      'q': this 
     }, 
     type: 'get', 
     success: function(output) { 

     } 
    });    
}); 

데모 같은 것을보십시오 : 당신은 당신이`로 json_encode ($ var에) 사용할 수 있습니다 ..에서 작업 스크립트에 Fiddle

+0

..' 이것이 문제라고 생각하지 않습니다. – Daedalus

+0

음, 내가 틀렸어. – Daedalus

+0

이것은 그 것이다. @Arun에게 감사드립니다. 중요한 가치 매개 변수는 내가 찾고있는 것이 었습니다. 그건 익숙하지 않아. – jakev