2012-04-22 4 views
1

안녕하세요 stackoverflow 개발자, 먼저 해결책을 찾지 못해서 미안하지만 지금은 잠시 노력해 왔습니다. AJAX 및/JSON에 대한 대안이있는 경우 내 접근 방식이 최선인지 확실하지 않으므로 언제든지 제안 해주십시오.AJAX JSON 결과 데이터에서 선택 목록 채우기

등록 된 사용자가 지역 및 주별 리조트, 레스토랑 및 관광 명소를 포함하는 관광 가이드 웹 사이트를 만들고 있습니다. 나는 Joomla를 사용하고있다! 및 Seblod (일부 사용자 정의 PHP, MySQL, Javascript 및 AJAX 사용). 27 개의 동적 선택을 수동으로 생성하고 싶지 않기 때문에 PHP/AJAX/JSON/JQuery를 사용하여 등록 된 해변 목록 (리조트 및 관광 명소와 관련되어야 함)을 선택하려고했습니다.

모든 것이 해변 목록을 채우는 것 외에는 작동하지만 문제가 무엇인지 알 수 없습니다. 추가, 생성 또는 옵션을 추가하는 여러 방법을 시도했지만 아무 일도 발생하지 않습니다. PHP의/JSON 결과는 다음과 같습니다

 
` 
    [{"id":"17","title":"Porto+de+Galinhas"},{"id":"18","title":"Serrambi"},{"id":"19","title":"Tamandar%E9"}] 

` 

그것은이 PHP 스크립트의 결과이다 :

 
` 

    if($_GET['q'] == 'beaches'){ 
     $praiaSQL = sprintf("SELECT * FROM vp_content AS c LEFT JOIN vp_cck_store_item_content AS v ON c.id = v.id WHERE c.catid = 10 AND v.cck = 'praia' AND v.venue_state = '%s' ORDER BY c.title ASC;", $_GET['s']); 
     $query = mysqli_query($connection, $praiaSQL); 
     $praia = array(); 
     while($results = mysqli_fetch_assoc($query)){ 
      array_push($praia, array('id' => $results['id'], 'title' => urlencode($results['title']))); 
     } 
     echo json_encode($praia); 
    } 

` 

나는 또한 악센트 문자를 처리 할 수있는 솔루션이 필요합니다. 여기에 urlencode를 시도하고 JQuery에서 디코딩하지만 문제가 될 수 있습니다. 원래 데이터로 남겨 두었을 때 악센트 부호가있는 문자가 있으면 결과 항목이 비어있었습니다.

 
` 

    function setBeachList(x,u){ 
      var theDiv = "#cck1r_" + x; 
      var theSelect = "#" + x; 
      $j(theSelect).children("option:not(:first)").remove(); 

      $j.ajax({ 
       url: u, 
       contentType: "application/json;charset=UTF-8", 
       success: function(data){ 
        if(data.length){ 
         /**** 
          This is where I'm stuck, as I can't find a way to make sure the 
          data is actually being treated/handled. 
          I've tried alerts and all sorts of other options to populate the 
          select. 
          I know it's being called because the before: and after: functions 
          are working. 
         *****/ 
         /* 
         $j.each(data, function(k, v){ 
          var o = new Option(); 
          var newTitle = urldecode(v.title); 
          $j(o).html(newTitle).val(v.id); 
          $j(theSelect).append(o); 
         }); 
         */ 
         var htm = ''; 
         for (var i = 0; i '+urldecode(data[i].title)+''; 
         } 

         $j(theSelect).html(htm); 
        } 
       }, 
       beforeSend: function(){ 
        $j(theDiv).hide(); 
       }, 
       complete: function(){ 
        $j(theDiv).show(); 
       }, 
       dataType: 'json', 
      }); 
     } 

` 
: -

는 (문제가 코드에서 어디 댓글을 달았습니다 u는 AJAX JSON 결과를 얻을 수있는 URL을 = X = 선택과) 결과를 처리하는 관련 JQuery와있다

시간과 인내심을 가져 주셔서 감사합니다. 저는이 분야에서 전문가가 아닙니다 (정확하게 초보자는 아니지만 가까운 ...).

답변

2

urldecode은 자바 스크립트 함수가 아니며 대신 decodeURIComponent을 사용할 수 있습니다.

당신이 그것을 변경할 때 일하고,

http://jsfiddle.net/MzMPK/1/

UPDATE :

나는 당신의 문제가 당신의 모든 경우에, 그것은 그들을 인코딩없이 작동 악센트 문자를 인코딩하는 노력에 대해 생각 인코딩은 UTF-8로 설정됩니다.

1

이것은 일반적인 JSON 구문 분석 오류입니다.

JSON의 형식이 올바르지 않으면 아약스 요청이 자동으로 실패합니다.

이 문제의 두 번째로 가장 일반적인 원인은 인코딩입니다. AJAX를 호출하는 페이지와 데이터를 반환하는 스크립트에서 UTF-8을 사용하고 있는지 확인하십시오.

악센트가있는 데이터 문제는 서버 쪽에서 데이터를 인코딩하지 않아도 해결 될 수 있으므로 클라이언트 측에서 처리를 취소 할 필요가 없습니다.

0

내 질문에 대답 : 저는 AJAX/JSON 전문가가 아니기 때문에 예상되는 동작인지는 모르겠지만 AJAX 결과를 생성하는 응답 페이지는 다른 데이터를 가질 수 없습니다. 하나는 예상했다.지역의 결과물을 남겨 두었 기 때문에 요청한 페이지에는 문제가 발생했습니다. 불필요한 데이터를 제거하고 나면 선택 목록이 정상적으로 업데이트되었습니다.

그건 내 게시물에서 언급하는 것을 잊어 버렸습니다. 그 이유는 페이지에 하나 이상의 결과가 있다고 생각했기 때문입니다. Firebug를 사용하여 코드를 확인한 결과 요청이 잘 전달되었습니다.

나는 악센트가 null 반환 내가 명시 적으로 UTF-8 모든 파일에 대한이 있지만, 응답 페이지를 htmlentities를 추가했다 ... 불편을 끼쳐 시간 내 주셔서 모두 감사하고 죄송합니다 .. .