2012-04-22 12 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は、JavaScriptの機能ではなく、 の代わりにdecodeURIComponentを使用できます。私はあなたの問題がアクセント付き文字をエンコードしようとしている程度で、あなたのすべての場合、それは、それらをコードせずに動作するはずだと思う

あなたがそれを変更すると働いて、

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

UPDATEエンコードはUTF-8として設定されます。

1

これは、サイレントエラーを解析する一般的なJSONです。

JSONの形式が正しくない場合、ajaxリクエストは黙って失敗します。

この問題の2番目によくある原因はエンコードです。 AJAXを呼び出しているページでUTF-8を使用していることと、データを返すスクリプトでUTF-8を使用していることを確認してください。

アクセント付きデータに関する問題は、サーバー側でデータをエンコードしないことで解決できます。したがって、クライアント側でアンコンバージする必要はありません。

0

自分自身の質問に答える: 私はAJAX/JSONのエキスパートではないので、予想通りの動作であるかどうかはわかりませんが、AJAX結果を生成する応答ページでは、 1つは期待される。私は地域のアウトプットを残していたので、リクエストしているページには何とかそれに対処するのに問題がありました。不要なデータを削除すると、選択リストが正常に更新されました。

私は自分の投稿で言及するのを忘れていました。なぜなら、ページ内に複数の結果が残っていると思っていたからです。 Firebugを使ってコードをチェックすると、要求はうまくいっていた。

は、私は明示的にすべてのファイルにUTF-8を持っているがアクセントは、nullを返した私は、応答ページににhtmlentitiesを追加する必要がありました

...お時間ありがとうございました、そして迷惑をおかけして申し訳ありません.. 。

関連する問題