2016-05-06 5 views
1

Хорошо, так что я немного новичок в JSON. Я пытаюсь связать вызов AJAX (запрос PHP mssql), который возвращает значения обратно в исходную форму через JSON. Я получаю [object Object] вместо фактического значения переменной. Через некоторые поиски я думаю, что проблема связана с разбором, но я думал, что json_encode справился с этим. Или, может быть, это так, и я не правильно структурировал это.AJAX json_encode return [object Object]

Вот что я пытаюсь выполнить: В форме html есть 3 поля: номер учетной записи, имя учетной записи и адрес1. Я хочу, чтобы пользователь мог ввести номер учетной записи, а затем заполнить поля имени и адреса на размытие с помощью результатов запроса mssql.

Вот что у меня есть: HTML

<body> 
<label>Account Number:</label><input type="text" id="acctnumber" /> 
<label>Account Name:</label><input type="text" id="acctname" /> 
<label>Address 1:</label><input type="text" id="address1" /> 
</body> 

Jquery (я поставил значение входного acctnumber в только для тестирования)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> 
<script> 
$(document).ready(function(){ 
     $("#acctnumber").blur(function(){ 
      $.ajax({ 
       url: "ajaxtestscript.php?acctnumber=hfi01", 
       dataType: "json", //the return type data is jsonn 
       success: function(data){ // <--- (data) is in json format 
       $("#acctname").val(data.Name); 
       $("#address1").val(data.Address); 
       //parse the json data 
       } 
     }); 
    }); 
}); 
</script> 

PHP

<?php 

    header('Content-Type: application/json'); 

//mssql connection info// 

    $acctnumber = $_GET["acctnumber"]; // we received this from the json call 

    //declare the SQL statement that will query the database 
    $query = "select[description],[daddr1] from trCustomer where company = '$acctnumber' and archived = 0"; 

    //execute the SQL statement and return records 
    $rs = $conn->execute($query); 

    $test = array(); 
    $test['Name'] = $rs[description]; 
    $test['Address'] = $rs[daddr1]; 

    echo json_encode($test); 


    //echo $name.$address; put this in to test the query was working, which it was 

    //close the connection and recordset objects freeing up resources 
    $rs->Close(); 
    $conn->Close(); 


    $rs = null; 
    $conn = null; 


    ?> 

Когда я на самом деле попробовать это в форме html, я вводим значение номера учетной записи (жестко запрограммированное в этой точке) и выхожу элемента размытия элемента, а в двух других полях ввода получается [object Object]. Хотя, если я просто echo мой запрос назад, я могу видеть значения, поэтому я думаю, что я сделал что-то неправильно или что-то оставил с моим json_encode. Любая помощь будет очень оценен.

+0

вам нужно поделиться «данными» для большей ясности. –

+0

вы говорите, что вы получаете [Object Object], когда вы добавляете предупреждение или console.log в функцию успеха? –

+0

Когда вы укажете 'json' как dataType, строка, возвращаемая из вашего php-скрипта, будет проанализирована как json, так что' data' является объектом javascript. Если строка правильная json, конечно ... Чтобы увидеть, что внутри, вы можете сделать 'console.log (data);' в функции успеха. – jeroen

ответ

0

Прежде всего, ваш вопрос неясен, и в зависимости от ситуации я бы отлаживал и тестировал выходы.

1. PHP: Результат запроса: var_dump(json_encode($test)); exit(0);

Это поможет вам узнать, что данные отправляются на фронт. предупреждение или консоль распечатать полученные данные в ajax для просмотра.

2. Javascript:console.log(data);

Это поможет вам знать, какие данные получены и что именно вам нужно написать для заполнения в требуемом поле. Проверьте консоль браузера.

Спасибо за выживание. Приветствия!

1

После выполнения запроса сначала необходимо получить результирующие строки с любой функцией, которую должна использовать ваша библиотека БД. И вы должны сначала подготовить свой запрос?

В противном случае объект, который вы пытаетесь сделать json_encode(), является ресурсным объектом. Вот почему вы получаете object Object. Я бы ожидал, что код такой:

$conn = new PDO(...); 
$stmt = $conn->prepare("SELECT ..."); 
$stmt->execute(); 

$test = array(); 
while ($row = $stmt->fetch()) { 
    $test[] = array(
     'Name' => $row[description], 
     'Address' => $row[daddr1] 
    ); 
} 
echo json_encode($test); 

$stmt = NULL; 
$conn = NULL;