PHP AJAX JSON 迭代
PHP AJAX JSON iteration
我正在熟悉 ajax 和 json。
我的页面是 addAccount.php,在里面,我有一个包含以下输入的表格:
<input type="text" id="partnerCode" />
<input type="button" id="pCodeSearch" value="Search" />
我有一个名为 global.js 的 JavaScript 页面获取信息:
$('input#pCodeSearch').on('click' , function()
{
var partnercode = $('input#partnerCode').val();
if($.trim(partnercode) != '')
{
$.post('api/pCodeSearch.php', {partnercode: partnercode}, function(data)
{
$('div#partner-data').text(data);
});
}
});
在上面的代码中,您将看到名为pCodeSearch.php 的处理页面。这是代码:
<?php
if(isset($_POST['partnercode']) === true && empty($_POST['partnercode']) === false)
{
require "../include/database.php";
require "../include/sessions.php";
$search = "SELECT FULL_NAME, PARTNER_CODE from partner WHERE PARTNER_CODE = '"htmlentities(stripslashes(trim($_POST['partnercode'])))."'";
$query = mysqli_query($dbc, $search); // $dbc is the connection string
if(mysqli_num_rows($query) !== 0)
{
$out = array();
while($row = $query->fetch_assoc())
{
$out[] = $row;
}
echo json_encode($out);
mysqli_free_result($query);
}
else
{
echo 'Partner not found';
}
}
?>
使用以上所有代码,我可以在名为 #partner-data 的 DIV 标记中显示,正如您在我上面的 JavaScript 代码中看到的那样。
但这是输出:
[{"FULL_NAME":"PARTNER SA","PARTNER_CODE":"0000011182"}]
我只想回显 PARTNER SA 和 0000011182。
我在 JavaScript 页面上尝试过此操作:
$.each(data, function(index, item)
{
$('<div>').
attr('value', item.PARTNER_CODE).
text(item.FULL_NAME).
appendTo($('#partner-data'));
});
但屏幕上什么都没有 returns。
而不是:
$('div#partner-data').text(data);
尝试:
$('div#partner-data').text(data.d.["FULL_NAME"]);
你的循环似乎是正确的如果从php返回的json字符串已经被解析。
当您第一次尝试看到一个字符串时,我的猜测是它没有被解析,所以您需要:
var obj = JSON.parse(data);
$.each(obj, function(index, item) {
$('<div>').
attr('value', item.PARTNER_CODE).
text(item.FULL_NAME).
appendTo($('#partner-data'));
});
您还可以告诉 jquery 使用 $.post
的第 4 个参数自动执行此操作以指定返回数据的类型:
$.post('api/pCodeSearch.php', {partnercode: partnercode}, function(data) {
// your original $.each() loop
}, 'json');
^^^^^^^^ here
我想我会帮助你:),
首先为 json 响应设置正确的内容类型,
所以这样写:
header('Contenty-Type: application/json');
echo json_encode($out);
然后客户端响应处理函数将如下所示:-
$('input#pCodeSearch').on('click' , function()
{
var partnercode = $('input#partnerCode').val();
if($.trim(partnercode) != '')
{
$.post('api/pCodeSearch.php', {partnercode: partnercode}, function(data)
{
// $('div#partner-data').text(data);
// Because data value is json, and actually it is returing a array of objects
// so
for(i = 0; i < data.length; i++){
currect_object = data[i];
$('div#partner-data').append(current_object.FULL_NAME + '\t' + current_object.PARTNER_CODE + '\n');
// here you can also create an templete and can use that like
// output_html = mytemplete(current_object.FULL_NAME, current_object.PARTER_CODE);
// $('div#partner-data').append(output_html);
} // __iterate to all array of objects
}); // __post
} // __if
});
而且我认为您不需要每个 jquery,可能有一些句法错误,因为我没有检查,:) 谢谢,
我正在熟悉 ajax 和 json。
我的页面是 addAccount.php,在里面,我有一个包含以下输入的表格:
<input type="text" id="partnerCode" />
<input type="button" id="pCodeSearch" value="Search" />
我有一个名为 global.js 的 JavaScript 页面获取信息:
$('input#pCodeSearch').on('click' , function()
{
var partnercode = $('input#partnerCode').val();
if($.trim(partnercode) != '')
{
$.post('api/pCodeSearch.php', {partnercode: partnercode}, function(data)
{
$('div#partner-data').text(data);
});
}
});
在上面的代码中,您将看到名为pCodeSearch.php 的处理页面。这是代码:
<?php
if(isset($_POST['partnercode']) === true && empty($_POST['partnercode']) === false)
{
require "../include/database.php";
require "../include/sessions.php";
$search = "SELECT FULL_NAME, PARTNER_CODE from partner WHERE PARTNER_CODE = '"htmlentities(stripslashes(trim($_POST['partnercode'])))."'";
$query = mysqli_query($dbc, $search); // $dbc is the connection string
if(mysqli_num_rows($query) !== 0)
{
$out = array();
while($row = $query->fetch_assoc())
{
$out[] = $row;
}
echo json_encode($out);
mysqli_free_result($query);
}
else
{
echo 'Partner not found';
}
}
?>
使用以上所有代码,我可以在名为 #partner-data 的 DIV 标记中显示,正如您在我上面的 JavaScript 代码中看到的那样。
但这是输出:
[{"FULL_NAME":"PARTNER SA","PARTNER_CODE":"0000011182"}]
我只想回显 PARTNER SA 和 0000011182。
我在 JavaScript 页面上尝试过此操作:
$.each(data, function(index, item)
{
$('<div>').
attr('value', item.PARTNER_CODE).
text(item.FULL_NAME).
appendTo($('#partner-data'));
});
但屏幕上什么都没有 returns。
而不是:
$('div#partner-data').text(data);
尝试:
$('div#partner-data').text(data.d.["FULL_NAME"]);
你的循环似乎是正确的如果从php返回的json字符串已经被解析。
当您第一次尝试看到一个字符串时,我的猜测是它没有被解析,所以您需要:
var obj = JSON.parse(data);
$.each(obj, function(index, item) {
$('<div>').
attr('value', item.PARTNER_CODE).
text(item.FULL_NAME).
appendTo($('#partner-data'));
});
您还可以告诉 jquery 使用 $.post
的第 4 个参数自动执行此操作以指定返回数据的类型:
$.post('api/pCodeSearch.php', {partnercode: partnercode}, function(data) {
// your original $.each() loop
}, 'json');
^^^^^^^^ here
我想我会帮助你:),
首先为 json 响应设置正确的内容类型,
所以这样写:
header('Contenty-Type: application/json');
echo json_encode($out);
然后客户端响应处理函数将如下所示:-
$('input#pCodeSearch').on('click' , function()
{
var partnercode = $('input#partnerCode').val();
if($.trim(partnercode) != '')
{
$.post('api/pCodeSearch.php', {partnercode: partnercode}, function(data)
{
// $('div#partner-data').text(data);
// Because data value is json, and actually it is returing a array of objects
// so
for(i = 0; i < data.length; i++){
currect_object = data[i];
$('div#partner-data').append(current_object.FULL_NAME + '\t' + current_object.PARTNER_CODE + '\n');
// here you can also create an templete and can use that like
// output_html = mytemplete(current_object.FULL_NAME, current_object.PARTER_CODE);
// $('div#partner-data').append(output_html);
} // __iterate to all array of objects
}); // __post
} // __if
});
而且我认为您不需要每个 jquery,可能有一些句法错误,因为我没有检查,:) 谢谢,