2010-02-23 2 views
1
<?php 
include_once('db.php'); 
$location = $_POST['location']; 
$doctor = $_POST['doctor']; 
$patient_id = $_POST['patient_id']; 

if(($location != "") && ($doctor != "")) { 
    $sql = "select Name,Age,Gest_age,Weight from rop_form where Location = '".$location."' and Doctor = '".$doctor."' and Patient_id = '".$patient_id."'"; 
    $result = mysql_query($sql); 
    $myresult = ""; 
    while($row = mysql_fetch_array($result)) { 
    $myresult1['Patient_id'] = 'R'.$patient_id; 
    $myresult1['Name'] = $row['Name']; 
    $myresult1['Age'] = $row['Age']; 
    $myresult1['Weight'] = $row['Weight']; 
    $myresult1['Gest_age'] = $row['Gest_age']; 
    } 
    $myresult = json_encode($myresult1); 
} 
else { 
    $myresult .= ""; 
} 
echo $myresult; 
?> 

Это мой PHP-код.jQuery array issue

Это код jQuery.

$("#patient_id").change(function() { 
    $.post("/diabetes/patient_detail_change.php",{ location:$("#location").val(),doctor:$("#doctor").val(),patient_id:$("#patient_id").val()} ,function(json_data) { 
    alert(json_data); 
    //var my_json = //{"Patient_id":"R00020","Name":"admin","Age":"12","Weight":"67","Gest_age":"2"//}; 
    $.each(json_data, function(key,value) { 
     alert(key + ': ' + value); 
     if(key == 'Name'){ $("#name").val(value); } 
     if(key == 'Age'){ $("#age").val(value); } 
     if(key == 'Weight'){ $("#ropweight").val(value); } 
     if(key == 'Gest_age'){ $("#gest_age").val(value); } 
    }); 
    }); 
}); 

alert (json_data); эта линия печатает правильно, как

{"Patient_id":"R00006","Name":"admin","Age":"12","Weight":"67","Gest_age":"2"} который является необходимым для появляется две JQuery

Но оператора цикла .each, который присутствует как: alert(key + ': ' + value); не печатает как Patient_id: R00006 и весь .but печатает как 0:{ 1:P 2:a 3:t 4:i .. что может быть проблемой?

+0

Не забудьте принять ответ, который лучше всего подходит для вас. –

ответ

2

В дополнении к ответу Мэтт Эллен, метод $.each() для обработки массивов JavaScript и массивов как объекты (которые имеют свойство длины). Ассоциативные массивы PHP (keyword-> value) вместо этого преобразуются в собственный JavaScript-объект. Вы можете использовать for...in петлю вместо:

for (var key in json_data) { 
    alert(key + ': ' + json_data[key]); 
    if(key == 'Name'){ $("#name").val(json_data[key]);} 
    if(key == 'Age'){ $("#age").val(json_data[key]);} 
    if(key == 'Weight'){ $("#ropweight").val(json_data[key]);} 
    if(key == 'Gest_age'){ $("#gest_age").val(json_data[key]);} 
} 

Но вы, вероятно, не нужны петли. Вы можете использовать только:

$.post (
    "/diabetes/patient_detail_change.php", 
    { 
    location:$("#location").val(), 
    doctor:$("#doctor").val(), 
    patient_id:$("#patient_id").val() 
    }, 
    function (json_data){ 
    if ("Name" in json_data) { $("#name").val(json_data.Name);} 
    if ("Age" in json_data) { $("#age").val(json_data.Age);} 
    if ("Weight" in json_data) { $("#ropweight").val(json_data.Weight);} 
    if ("Gest_age" in json_data) { $("#gest_age").val(json_data.Gest_age);} 
    }, 
    "json" 
); 
+0

Хорошая точка. Лучше всего избавиться от ненужных циклов. –

+0

$ ("# patient_id") .Кнопкой (функция() {$ .post ( "/diabetes/patient_detail_change.php", { место: $ ("# место") вал(), врач:. $ ("# врач") .val(), patient_id: $ ("# patient_id"). val() }, function (json_data) { alert (json_data); alert (json_data.Name); if (json_data.Name) {$ ("# name"). Val (json_data.Name);} if (json_data.Age) {$ ("# age"). Val (json_data.Age);} if (json_data.Weight) {$ ("# ropweight"). val (json_data.Вес);} if (json_data.Gest_age) {$ ("# gest_age"). Val (json_data.Gest_age);} }, "Json" ); }); – Hacker

+0

Я сделал это по-прежнему печатает предупреждение (json_data); как «{Patient_id]:« R00006 »,« Name »:« admin »,« Age »:« 12 »,« Weight »:« 67 »,« Gest_age »:« 2 »}, но alert (json_data.Name); печатает как undefined :( – Hacker

2

В своем сообщении о статусе вам необходимо указать, что вы возвращаете JSON.

$.post("/diabetes/patient_detail_change.php",{location:$("#location").val(),doctor:$("#doctor").val(),patient_id:$("#patient_id").val()} ,function(json_data){ 

alert(json_data); 

$.each(json_data, function(key,value){ 
alert(key + ': ' + value); 
if(key == 'Name'){ $("#name").val(value);} 
if(key == 'Age'){ $("#age").val(value);} 
if(key == 'Weight'){ $("#ropweight").val(value);} 
if(key == 'Gest_age'){ $("#gest_age").val(value);} 

}); 
}, "json"); 

Нравится так.

В настоящий момент ваши возвращенные данные обрабатываются как строка, поэтому каждый оператор выводит каждый символ.

Смотрите определение здесь jQuery post definition

+0

+1, избили меня до трех секунд :( – karim79

+0

Мое желание могло оставить ошибки ... –

1

Вы должны использовать $.post ("/diabetes/patient_detail_change.php",{ location:$("#location").val(),doctor:$("#doctor").val(),patient_id:$("#patient_id").val()}, function (json_data){ //blah blah },"Json");

пожалуйста, проверьте последний аргумент "JSon"

+0

Я сделал это и добавил json в конце., Но затем его печать так же, как и раньше :( – Hacker

+1

Открыть firebug goto Net -> xhr tab и проверить, что данные json поступают в надлежащем формате – Tinku

1

Используйте $.getJSON вместо $ .post.
Это будет возвращать объект (проанализирован JSON), а не строку

+0

Это использует метод GET, но pradeep является POSTing данных. –