我有一个获取json字符串的ajax请求但由于某种原因它已经开始返回“undefined”,json字符串确实返回了有效的JSON,但它只是不起作用!
Ajax请求:
if (editSeq) {
$.ajax({
url: './json/admin/getData.php',
type: 'POST',
async: false,
data: { SEQ: editSeq },
dataType: 'json',
success: function (data) {
var HTML = data.HTML;
$('#blankform').append(HTML);
alert(HTML);
}
});
JSON:
<?php
include("../../includes/db.php");
$SEQ = $_POST["SEQ"];
$sth = sqlsrv_query($conn,"SELECT HTML from TBL_DATA WHERE Sequence = " . $SEQ);
$rows = array();
while($r = sqlsrv_fetch_array($sth,SQLSRV_FETCH_ASSOC)) {
$rows[] = $r;
}
if( $sth === false)
{
echo "Error in query preparation/execution.\n";
die( print_r( sqlsrv_errors(), true));
}
print json_encode($rows);
?>
这是我的JSON回复:
[
{
"HTML": " \n\n<div id=\"div_143\" style=\"width: 300px; white-space: nowrap; padding-right: 50px; left: 60px; top: 48px;\" class=\"ui-resizable ui-draggable ui-resizable-disabled ui-state-disabled\" aria-disabled=\"true\"><label> Incident # <input type=\"text\" style=\"width:100%;\" id=\"input_143\" role=\"textbox\" aria-autocomplete=\"both\" aria-disabled=\"false\" aria-readonly=\"false\" aria-multiline=\"false\" class=\"jqx-widget-content jqx-widget-content-web jqx-input jqx-input-web jqx-widget jqx-widget-web jqx-rc-all jqx-rc-all-web\" placeholder=\"\" disabled=\"disabled\"><\\/label><div class=\"ui-resizable-handle ui-resizable-e\" style=\"z-index: 90;\"><\\/div><div class=\"ui-resizable-handle ui-resizable-w\" style=\"z-index: 90;\"><\\/div><div class=\"ui-resizable-handle ui-resizable-sw\" style=\"z-index: 90;\"><\\/div><div class=\"ui-resizable-handle ui-resizable-ne\" style=\"z-index: 90;\"><\\/div><div class=\"ui-resizable-handle ui-resizable-nw\" style=\"z-index: 90;\"><\\/div><div class=\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\" style=\"z-index: 90;\"><\\/div><\\/div>"
}
]
答案 0 :(得分:1)
首先,在AJAX脚本中,总是在回显输出后终止脚本。 比方说,如果你在脚本上有更多的东西,就像其他的IF一样,如果你已经显示了JSON输出,则不需要运行它们,否则额外的输出会弄乱你的JSON,一切都将停止工作。
所以,始终执行:
print json_encode($rows);
exit;
其次,在您的情况下,您可能会遇到一些SQL问题,所有问题都是您没有看到错误消息。它可能会说“查询准备/执行错误”,但您无法看到它!或者你可以有任何其他PHP致命错误,你看不到,因为它弄乱了JSON和Javascript无法显示.HTML部分。
您的解决方案是测试它,暂时将Javascript更改为:
$.ajax({
url: './json/admin/getData.php',
type: 'POST',
async: false,
data: { SEQ: editSeq },
// dataType: 'json', // temporarily comment it out to receive plain messages
success: function (data)
{
alert(data); return; // temporary line. Remove after debuging.
var HTML = data.HTML;
$('#blankform').append(HTML);
alert(HTML);
}
});
第三,(在添加了JSON输出之后),如果它以[{"HTML":
要使用数组,您应该将JavaScript更改为:
var HTML = data[0].HTML;
甚至,如果可能有很多行:
var HTML = '';
for(i=0;i<data.length;i++) HTML += data[i].HTML;\
答案 1 :(得分:0)
使用var HTML = data.HTML;
,您试图从php返回的数据对象中获取属性“HTML”。但是你返回一个数组数组(mysql行)。所以:data.HTML
未定义。
尝试:
if (editSeq) {
$.ajax({
url: './json/admin/getData.php',
type: 'POST',
async: false,
data: { SEQ: editSeq },
dataType: 'json',
success: function (data) {
$('#blankform').append(data);
alert(data);
}
});
实际上,将原始数据发布到div左右没有多大意义,但在这种情况下,您将看到您的数据并可以继续编程来处理它们。
为了从data
中获取行(如果我的假设是正确的),你应该迭代它们:
for ( var n = 0; n = data.length; n++ ) // rows
{
alert(data[n]); // show one single row
}
根据你的json,这可以改变:
if (editSeq) {
$.ajax({
url: './json/admin/getData.php',
type: 'POST',
async: false,
data: { SEQ: editSeq },
dataType: 'json',
success: function (data) {
$('#blankform').append(data[0].HTML);
alert(data[0].HTML);
}
});