2014-12-18 2 views
1

Я использую ajax для получения данных и заполнения поля выбора. В следующем коде я повторяю вывод в файле ajax.php и получаю его. Все работает нормально. Однако, как вы можете видеть, весь html заполняется в одном окне выбора. Я хочу вернуть данные из двух отдельных блоков выбора вместо одного.Получение нескольких данных с помощью jQuery ajax POST

Поэтому мой вопрос заключается в том, как я могу отправить два разных типа данных отдельно от ajax.php и как я могу получить его при успешной работе.

$.ajax({ 
    type: "POST", 
    url: "../ajax.php", 
    data: {name: 'select1', id: id}, 
    cache: false, 
    success: function(html){     
     $(".select1").html(html); 
    }   
}); 

ajax.php только отголоски данные:

//data for select1 
foreach($rows as $row){ 
    echo '<option>x</option>';  
} 

//I want to add another one for select2 
foreach($rows1 as $row){  
    echo '<option>y</option>';  
}  
die(); 

и хотят получить что-то вроде:

success: function(html){     
    $(".select1").html(data1); 
    $(".select2").html(data2); 
} 

Edit: Я выборка данных с помощью Ajax, потому что я используя зависимые поля выбора и извлечение данных из базы данных. Поэтому, щелкнув по выбору 1, он извлекает данные для выбора 2 из базы данных, поэтому я это делаю.

+0

почему -1? Что я спросил не так? – user1355300

+0

Я хочу понять, почему вы это делаете и в чем смысл? –

+0

, потому что я использую зависимые поля выбора и извлекаю данные из базы данных. Поэтому, щелкнув по выбору 1, он извлекает данные для выбора 2 из базы данных, поэтому я это делаю. – user1355300

ответ

2

вы могли бы сделать некоторые вещи, как это в вашем ajax.php

//select1 
$data['html1'] = NULL; 
foreach($rows as $row){ 
    $data['html1'] .= '<option>x</option>';  
} 
//select2 
$data['html2'] = NULL; 
foreach($rows1 as $row){  
    $data['html1'] .= '<option>y</option>';  
} 
$resonse = json_encode($data); 
echo $response; 
//JQUERY MAKE SURE THAT ITS OF TYPE JSON. 
success: function(response){     
    $(".select1").html(response.html1); 
    $(".select2").html(response.html2); 
} 
1

конструкции two diffrent select options in php с двумя различными индексами массива, как это

//select1 
    $data['first'] = '<option>first</option>'; // loop for more data  
//select2 
    $data['second'] = '<option>second</option>';  

эхо json_encode($data); и получать его успеха и показать соответственно.

success: function(data){ 
    var data = JSON.parse(data); 
    $(".select1").html(data.first); 
    $(".select2").html(data.second); 
} 
1
foreach($rows as $row){ 
    $selects['select1'] = '<option>x</option>';  
} 

foreach($rows1 as $row){  
    $selects['select2'] = '<option>y</option>';  
}  

print_r(json_encode($selects)); 

die(); 

$.ajax({ 
    type: "POST", 
    url: "../ajax.php", 
    success: function(data){   
     $(".select1").html(data.select1); 
     $(".select2").html(data.select2); 
    }   
}); 
1

Чтобы отделить данные, возвращаемые, вы собираетесь хотите использовать другой формат, чтобы вернуть данные - на данный момент, все возвращается в

<option>x</option> 
<option>x</option> 
<option>x</option> 
<option>y</option> 
<option>y</option> 
<option>y</option> 

, который не может быть разделены браузером. Если кодировать как JSON, вы можете сделать его вернуть

{ 
    select1: [ 
    "<option>x</option>", 
    "<option>x</option>", 
    "<option>x</option>" 
    ] 
    select2: 
    "<option>y</option>", 
    "<option>y</option>", 
    "<option>y</option>", 
    ] 
} 

Чтобы сделать это, вам нужно использовать этот PHP:

$select1 = array(); 
foreach($rows1 as $row){ 
    array_push($select1, $row); 
} 
$select2 = array(); 
foreach($rows2 as $row){ 
    array_push($select2, $row); 
} 
echo json_encode(array('select1' => $select1, 'select2' => $select2), JSON_FORCE_OBJECT); 

и это JavaScript:

success: function(data){ 
    var decoded = JSON.parse(data); 
    for (var l = 0; l < decoded.select1.length; l++){ 
    $(".select1").append(decoded.select1[l]); 
    } 
    for (var l = 0; l < decoded.select2.length; l++){ 
    $(".select2").append(decoded.select2[l]); 
    } 
} 
1
var json_post = [ 
    { "id" : "1", "name" : "test1" }, 
    { "id" : "2", "name" : "test2" } 
]; 

$.ajax({ 
    type: "POST", 
    url: "../ajax.php", 
    data: json_post, 
    cache: false, 
    dataType: 'json', 
    success: function(data){     
     var json = $.parseJSON(data); 
     $.each(
      json, 
      function(i, val){ 
       $(".select"+val.id).html(val.name) 
      } 
     ); 
    } 
}); 

Вы могли бы что-то сделать по вышеуказанным строкам с помощью json. (Я его не тестировал).

1

Json - лучший выбор. даже если вы не хотите использовать это, тогда здесь будет другой вариант.

//select1 
$data = ""; 
foreach($rows as $row){ 
    $data .= '<option>x</option>';  
} 
$data .= "^^^"; // you can use any separator 
//select2 

foreach($rows1 as $row){  
    $data .= '<option>y</option>';  
} 

echo $data; 

success: function(response){ 
    var options = response.split("^^^"); 

    $(".select1").html(options[0]); 
    $(".select2").html(options[1]); 
} 
Смежные вопросы