2016-08-10 3 views
0

技術データを取得します:CakePHPの1.3、jQueryのCakePHPの1.3 - - jQueryの有効なJSONで使用

最初の配列を考えると、私はこの最初の配列で選択した値に依存し二番目の配列の値を設定します。

具体的には、最初の配列は企業のリストであり、2番目の配列は選択された会社の求人で満たされなければなりません。このために、私は仕事が提供するデータベースから取得するためにajaxリクエストを変更します。

有効ではない点は、有効なJSONをJavascriptに提供できないようだということです。 返されるJSONは常に新しい行で始まります。 (私はFirefoxで "\ n"のように見たことがあると思いますが、Chromeは新しい行だけを入れます)。

私は別のコンテキスト(Spring MVC)でこのjavascriptを使用することができ、動作していました。だから私の主な容疑者は私のCakePHPコントローラです。

私はすでにJSで文字列としてデータを操作するなど、多くのことを試みましたが、うまくいきませんでした。 あなたは既にこの問題につまずいていますか?

ここでコード:

HTML:

<div class="form" style="width: auto"> 

     <?php 
     echo $form->create('Slot', array('url' => array('controller' => 'slot', 'action' => 'add'))); 
     echo $form->input('company_id', array('label' => 'Company:', 'options' => $companies)) . "<br/>"; 
     echo $form->input('offer_id', array('label' => 'Offer', 'options' => array('0' => 'Chose a company first!'))) . '<br/>'; 
     echo $form->end('Register') . '<br/>'; 
     ?> 
</div> 

Javascriptを:

$.ajax({ 
    url: "/admin/slots/getCompanyOffers/" + this.value, 
    type: "POST", 
    dataType: "json", 
    success: function (data) { 
     var select = $('#SlotOfferId'); 
     select.empty(); 
     select.append($('<option/>')); 

     $.each(data, function (key, value) { 
      select.append($('<option/>').text(value).attr('value', key)); 
     }); 
    } 
}); 

コントローラー:

function admin_getCompanyOffers($companyId) { 
    Configure::write('debug', 0); 
    $this->autoRender = false; 
    if (!$this->RequestHandler->isPost()) { 
     echo "POST mandatory"; 
     return; 
    } 

    $offers = $this->Offer->find('all', array('recursive' => -1, 
     'fields' => array('id', 'title'), 
     'conditions' => array('company_id' => $companyId))); 

    echo json_encode(Set::extract('/Offer/.', $offers)); 
} 
+0

応答する前に適切なヘッダーを設定する必要があると思います。最も簡単な方法: 'header( 'Content-Type:application/json')' – Bart

+0

@Bartこの行はコントローラのメソッドで追加する必要がありますか? – Acedrin

+0

はい、 'echo json_encode ...'の直前 – Bart

答えて

0

あなたはこの

を試してみてください
function admin_getCompanyOffers($companyId) { 
    Configure::write('debug', 0); 
    $this->autoRender = false; 
    if (!$this->RequestHandler->isPost()) { 
     echo "POST mandatory"; 
     return; 
    } 

    $offers = $this->Offer->find('all', array('recursive' => -1, 
     'fields' => array('id', 'title'), 
     'conditions' => array('company_id' => $companyId))); 

    return json_encode(Set::extract('/Offer/.', $offers)); 


} 
+0

あなたが言ったように 'echo'を' return'に変更しましたが、動作しませんでした。 JSONの初めにまだ新しい行があり、 '$ .ajax'はそれを有効なJSONとして認識していません。 – Acedrin

関連する問題