Я пытаюсь использовать плагин autosuggest jquery для ввода пользовательских данных, jquery, которые вводят в скрипт php mysql для получения информации, а затем заменяют пользовательский ввод тем, что было получено из запроса jquery. Теперь это должно озадачить вас всех на минуту.
сначала ... если я заменим возвращенный текст из скрипта с автозаполнением на простой текст, моя javascript-функция jquery вернет это значение идеально. Но если я попытаюсь вернуть запрашиваемые данные из сценария, тогда я получу ноль (0) для возвращаемых данных.
Я предоставлю код, необходимый для работы. Я включу в этот код, где проблема существует, насколько мне известно. и я приведу примеры того, что работает, а что нет.
Прежде чем написать это, я протестировал несколько возможных ситуаций.
Я удостоверился, что скрипт autosuggest подключается к БД, что запрос действителен, что данные существуют в таблице, и что найденный набор результатов корректно выводится с помощью вторичной формы, которая просто отправляет запрос на публикацию в скрипт, и он отвечает именно теми данными, которые он должен, поэтому мой запросный скрипт, который я знаю, работает правильно. Но в то же время я подозреваю, что это часть проблемы.
Я проверил, что моя функция javascript AcctNmb запускается при изменении с помощью предупреждения, а также я могу видеть, что функция переносится через весь путь по ответу, который я получаю в поле ввода текста, когда она изменяется, загрузить класс включен, значение изменено, класс загрузки удален, функция завершается полностью, как и должно.
Теперь, чтобы увидеть, что проблема терпит неудачу и успешно, просто перейдите к php автозапрашиваемого запроса, и вы увидите мои две строки: одна дает правильный ответ, а другая дает ответ 0. Это проблема, которую я не могу понять, как разница между двумя линиями в этом и заключается в этом.
// EDIT
Я попытался изменить скрипт запроса на метод запросов старой школы, и я все еще получаю те же результаты. Если я повторяю запрашиваемые данные, я получаю ответ «0», если я повторяю строку текста, тогда этот текст возвращается мне. Я добавил альтернативный метод запроса ниже. Пожалуйста, кто-нибудь может увидеть, что я делаю не так? Я просто не вижу разницы между повторением вариантов и отображением строки текста, поскольку они должны быть настолько большими, насколько я знаю одно и то же.
// html код формы
<form id="FormVoucher" name="FormVoucher" method="post" action="index.php">
<table width="100%">
<tr>
<td>Supplier Number:</td>
<td><input type="text" size="25" value="" name="Facctnmb" id="Facctnmb" onChange="AcctNmb(this)" AUTOCOMPLETE=OFF /></td>
</tr>
<tr>
<td>Invoice Number:</td>
<td><input type="text" name="Finvnmb" id="Finvnmb" size="25" maxlength="25" AUTOCOMPLETE=OFF /></td>
</tr>
<tr>
<td>Invoice Amount:</td>
<td><input type="text" name="Finvamt" id="Finvamt" size="25" maxlength="30" AUTOCOMPLETE=OFF /></td>
</tr>
<tr>
<td>Invoice Date:</td>
<td><input type="text" name="Finvdt" id="Finvdt" size="10" AUTOCOMPLETE=OFF /></td>
</tr>
<tr>
<td>Purchase Order:</td>
<td><input type="text" name="Fpo" id="Fpo" size="10" maxlength="8" AUTOCOMPLETE=OFF /></td>
</tr>
<tr>
<td>Remark:</td>
<td><input name="Fremark" id="Fremark" type="text" size="30" maxlength="30" AUTOCOMPLETE=OFF /></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</table>
<div align="left">
<p>G/L: <input name="Fgl[]" id="Fgl[]" type="text" size="12" maxlength="15" AUTOCOMPLETE=OFF /> Amount: <input name="Famt[]" id="Famt[]" type="text" size="15" maxlength="15" AUTOCOMPLETE=OFF /></p>
<p id="add-element">Add More G/L Lines For Entry</p>
<div id="content"></div>
<input type="submit" value="Submit" />
</div>
</form>
// код JavaScript
function AcctNmb(inputString){
$('#Facctnmb').addClass('load');
$.post("acctnmb.php", {queryString: ""+inputString+""}, function(data){
if(data.length >0) {
$('#Facctnmb').val(data);
$('#Facctnmb').removeClass('load');
}
});
}
// скрипт автозаполнения запроса
<?php
$db = new mysqli('localhost', 'username' ,'password', 'data');
if(!$db) {
echo 'Could not connect to the database.';
} else {
if(isset($_POST['queryString'])) {
$queryString = $db->real_escape_string($_POST['queryString']);
if(strlen($queryString) >0) {
$query = $db->query("SELECT acct, mailing_name FROM pub_addrs WHERE acct = '$queryString'");
if($query) {
$result = $query->fetch_object();
$varresults = $result->acct." ".$result->mailing_name;
echo $varresults; //this one fails
//echo 'This works';
} else {
echo 'OOPS we had a problem :(';
}
} else {
// do nothing
}
} else {
echo 'There should be no direct access to this script!';
}
}
?>
// EDIT
// альтернативный скрипт автозаполнения запроса
<?php
require_once('../Connections/workdata.php');
//select database
mysql_select_db($database_workdata, $workdata);
if(isset($_POST['queryString'])) {
$queryString = $_POST['queryString'];
$query = sprintf("SELECT acct, mailing_name FROM pub_addrs WHERE acct = '%s'",$queryString);
$result = mysql_query($query, $workdata) or die(mysql_error());
$row_result = mysql_fetch_assoc($result);
echo $row_result['acct']." ".$row_result['mailing_name'];//this fails
//echo 'this works';
}
?>
// тестовые данные таблицы mysql
-- phpMyAdmin SQL Dump
-- version 3.3.6deb1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Sep 05, 2010 at 04:12 PM
-- Server version: 5.1.49
-- PHP Version: 5.3.2-2
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `workdata`
--
-- --------------------------------------------------------
--
-- Table structure for table `pub_addrs`
--
CREATE TABLE IF NOT EXISTS `pub_addrs` (
`acct` int(11) NOT NULL,
`mailing_name` varchar(50) NOT NULL,
`special_payee` int(11) NOT NULL,
`pub_vendor` varchar(1) NOT NULL,
`longaddress` varchar(20) NOT NULL,
`alpha_name` varchar(40) NOT NULL,
PRIMARY KEY (`acct`),
KEY `longaddress` (`longaddress`),
KEY `special_payee` (`special_payee`),
KEY `alpha_name` (`alpha_name`),
FULLTEXT KEY `mailing_name` (`mailing_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Dumping data for table `pub_addrs`
--
INSERT INTO `pub_addrs` (`acct`, `mailing_name`, `special_payee`, `pub_vendor`, `longaddress`, `alpha_name`) VALUES
(701, 'DO NOT MAIL- Deleted Account ', 701, 'C', 'C24250 ', '**** DUPLICATE SET-UP **** '),
(702, 'DO NOT MAIL- Deleted Account ', 702, 'C', 'C24603 ', '**** DUPLICATE SET-UP **** ');