Показать сообщение отдельно
  #1 (permalink)  
Старый 09.02.2015, 17:27
Новичок на форуме
Отправить личное сообщение для evgeniex Посмотреть профиль Найти все сообщения от evgeniex
 
Регистрация: 09.02.2015
Сообщений: 6

Ajax запрос в два шага
Всем доброго дня! Помогите пожалуйста новичку. Стоит вот такая задача - нужно прикрутить 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
Вложения:
Тип файла: txt detail.txt (8.7 Кб, 5 просмотров)

Последний раз редактировалось evgeniex, 09.02.2015 в 18:24.
Ответить с цитированием