Всем доброго дня! Помогите пожалуйста новичку. Стоит вот такая задача - нужно прикрутить AJAX поиск по номеру детали на сайт. Загвоздка задачи заключается в том, что сама база находится у поставщика и выборка из нее осуществляется посредством их api.
По порядку:
Форма поиска:
Код:
|
<html>
<head>
<h3>Поиск по номеру детали</h3>
<script src="client/livesearch.js"></script>
<style type="text/css">
#livesearch
{
margin:15px;
width:auto;
}
#txt1
{
margin:0px;
background:#ccc;
padding:5px;">
}
</style>
</head>
<body>
<form>
<input type="text" id="txt1" size="300"
onkeyup="showResult(this.value)">
<div id="livesearch"></div>
</form>
</body>
</html> |
Сам поиск livesearch.js
var xmlHttp;
function showResult(str)
{
if (str.length==0)
{
document.getElementById("livesearch").
innerHTML="";
document.getElementById("livesearch").
style.border="0px";
return;
}
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var url="client/detail.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged ;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("livesearch").
innerHTML=xmlHttp.responseText;
document.getElementById("livesearch").
style.border="1px solid #A5ACB2";
}
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
и сам detail.php который осуществляет запрос к базе поставщика
<?
$nacenka=25;
$login='**********';
$password='**********';
$store=true;
$maxDeliveryDays = 1;
//$detailGroup = 'Original'
$wsdl='http://www.part-kom.ru/webservice/search.php?wsdl';
$number=$_GET['q'];
$client = new SoapClient($wsdl);
$result = $client->getMakersByNumber($login, $password, $number, $store, true,true,true);
echo '<div style="width:1000px; margin:20px auto; ">';
$flag=0;
foreach($result as $marka){
if (strtoupper($marka['name'])==strtoupper($_GET['mod'])){$flag=1; $marka_id=$marka['id'];}
}
if ($_GET['marka_id']){ $flag=1; $marka_id=$_GET['marka_id'];}
if ($flag==0){
if (count($result)>0){
echo 'Пожалуйста уточните производителя </br>';
foreach($result as $marka){
echo '<a href="'.$_SERVER['REQUEST_URI'].'&marka_id='.$marka['id'].'">'.$marka['name'].'</a></br>';
}
} else {
echo 'Извините, по данному запросу ничего не найдено ';
}
}
if ($flag==1){
/// ищем только оригиналы
$result_1 = $client->FindDetail($login, $password, $number, $marka_id, $detailGroup,false,false,true,true,true);
if (count($result_1)>0){
ПОЛНЫЙ ФАЙЛ В ПРИЛОЖЕНИИ !!!!
Простите за простыню, но я из самых начинающих новичков
Теперь о самой задаче: Необходимо осуществить поиск по каталожному номеру детали. Естественно, у производителей нумерация не уникальна и пересекается с другими производителями. Поэтому сначала делается выборка всех производителей, имеющих в каталоге деталь с введенным номером.
За это отвечает getMakersByNumber($login, $password, $number, $store, true,true,true); который возвращает ссылки на конкретные элементы каталога, имеющие конкретный идентификатор $number (каталожный номер) и $marka_id (id производителя запчасти), что позволяет выбрать конкретную запчасть.
После уточнения производителя запчасти, снова обращаемся к сервису парткома используя FindDetail, например так: FindDetail($login, $password, $number, $marka_id, $detailGroup,false,false,true,true,true) и получаем всю информацию о стоимости, наличии и т.д.
Моя загвоздка состоит в том, что без обновления страницы я могу получить только результат работы getMakersByNumber, а вот FindDetail работает - но уже с обновлением страницы, что нарушает общий замысел.
Вопрос: как сделать такой запрос в два шага без обновления страницы? Буду премного благодарен за ответы.
Форма живет на moyvin.ru