Я использую WAMP v.2.5 на машине Windows10. Мой проект - это PHP-проект, запускающийся из базы данных MySQL. Он включает в себя многочисленные звонки AJAX, которые работают нормально. Однако у меня есть один конкретный вызов, который дает мне ошибку «Неожиданный конец ввода».Ajax вызов не ждет ответа сервера
Звонок сделан из представления, направлен на глобальный скрипт PHP-обработчика ajax, который пересылает запрос контроллеру, который затем запрашивает модель для ответа. Вызывается соответствующий метод модели. Метод содержит проверку ошибок и генерирует исключения для пустого результата. DB Query in является действительным и возвращает результаты при использовании в консоли. 9 раз из 10, однако, ajax fn будет завершен без получения/чтения результата запроса и, таким образом, генерирует указанную выше ошибку. Иногда это будет работать нормально.
При размещении на живом сервере все работает должным образом. Это почти так, как если бы скрипт работал слишком быстро на локальной машине, чтобы ждать ответа БД или любого исключения.
Может ли кто-нибудь сказать мне, как правильно проверить, что происходит, или решить проблему выше?
EDIT:
Trail Пораженные код:
$(document).ready(function()
{
//some code
updateFilteredScheduleList();
//some code
});
function updateFilteredScheduleList()
{
var opts = $.extend(true, {}, dialogOptions);
getFilteredScheduleResults()
.done(function(returnedData)
{
var returnedDataObj = parseAjaxJSONResponse(returnedData);
if(returnedDataObj.hasOwnProperty('success'))
buildScheduleList(returnedDataObj.response);
})
.error(function(xhr, options, error)
{
opts.message = error;
displayDialog(opts);
return false;
});
}
function getFilteredScheduleResults()
{
var values = getFilterValues();
values.controller = 'WSVisits';
values.method = 'getFilteredScheduleResults';
console.log(values);
return $.ajax({
type: 'post',
cache: false,
data: values,
url: controllersAjaxPath
});
}
function getFilterValues()
{
var values = {};
//get values of view filters
return values;
}
function parseAjaxJSONResponse(data)
{
var opts = $.extend(true, {}, dialogOptions);
try
{
var tmp = JSON.parse(data);
if(tmp.hasOwnProperty('error'))
{
opts.message = tmp.error;
displayDialog(opts);
return false;
}
return tmp;
}
catch(e)
{
opts.message = e.message;
displayDialog(opts);
return false;
}
}
метод PHP (немного отредактирован):
function getFilteredScheduleResults($args = null)
{
$id = intval($args['MyID']);
$region_id = (!$id) ? (intval($args['RegionID']) > 0) ? intval($args['RegionID']) : 0 : 0;
$county_id = (!$id) ? (intval($args['CountyID']) > 0) ? intval($args['CountyID']) : 0 : 0;
$language_id = (!$id) ? (intval($args['LanguageID']) > 0) ? intval($args['LanguageID']) : 0 : 0;
$center_id = (!$id) ? (intval($args['CenterID']) > 0) ? intval($args['CenterID']) : 0 : 0;
$type_id = (!$id) ? (intval($args['TypeID']) > 0) ? intval($args['TypeID']) : 0 : 0;
$support_type_id = (!$id) ? (intval($args['SupportTypeID']) > 0) ? intval($args['SupportTypeID']) : 0 : 0;
$address_token = (!$id) ? (trim($args['AddressContains']) !== '') ? trim($args['AddressContains']) : null : null;
$purpose_id = (intval($args['PurposeID']) > 0) ? intval($args['PurposeID']) : 0;
$associate_id = (intval($args['AssociateID']) > 0) ? intval($args['AssociateID']) : 0;
if(!empty($args['From']))
{
$from_obj = DateTime::createFromFormat('d/m/Y', $args['From']);
$args['From'] = (!$from_obj) ? null : $from_obj->format('Y-m-d');
}
if(!empty($args['To']))
{
$to_obj = DateTime::createFromFormat('d/m/Y', $args['To']);
$args['To'] = (!$to_obj) ? null : $to_obj->format('Y-m-d');
}
$sql = " /*query*/ WHERE 1 ";
if($id)
$sql.= " AND (s.MyID = :MyID) ";
else
{
if($region_id)
$sql.= " AND (RegionID = :RegionID) ";
if($county_id)
$sql.= " AND (CountyID = :CountyID) ";
if($language_id)
$sql.= " AND (LanguageID = :LanguageID) ";
if($center_id)
$sql.= " AND (CenterID = :CenterID) ";
if($type_id)
$sql.= " AND (s.TypeID = :TypeID) ";
if($support_type_id)
$sql.= " AND (SupportTypeID = :SupportTypeID) ";";
if(!is_null($address_token))
$sql.= " AND (UPPER(CONCAT_WS(' ', Add1, Add2, Add3, CityTown)) LIKE UPPER(:AddressToken)) ";
}
$sql.= " GROUP BY s.MyID ORDER BY MyName ASC ";
$db = new Database();
try
{
$db->query($sql);
if($id)
$db->bind(':MyID', $id);
else
{
if($region_id)
$db->bind(':RegionID', $region_id);
if($county_id)
$db->bind(':CountyID', $county_id);
if($language_id)
$db->bind(':LanguageID', $language_id);
if($center_id)
$db->bind(':CenterID', $center_id);
if($type_id)
$db->bind(':TypeID', $type_id);
if($support_type_id)
$db->bind(':SupportTypeID', $support_type_id);
if(!is_null($address_token))
$db->bind(':AddressToken', '%' . $address_token . '%');
}
$db->execute();
$tmp = $db->fetchAllAssoc();
$get_assignments_only = (!empty($args['AssignmentsOnly']));
$returned = [];
$sql = " SELECT VisitID FROM visits_ws WHERE MyID = :MyID ";
if($purpose_id)
$sql.= " AND (VisitPurposeID = :Purpose) ";
if($associate_id)
$sql.= " AND ((Associate1ID = :AssociateID) OR (Associate2ID = :AssociateID) OR (Associate3ID = :AssociateID) OR (Associate4ID = :AssociateID)) ";
if(!empty($args['From']))
$sql.= " AND (VisitDate >= :From) ";
if(!empty($args['To']))
$sql.= " AND (VisitDate <= :To) ";
$db->query($sql);
foreach($tmp as $i => $t)
{
$db->bind(':MyID', $t['MyID']);
if($purpose_id)
$db->bind(':Purpose', $purpose_id);
if($associate_id)
$db->bind(':AssociateID', $associate_id);
if(!empty($args['From']))
$db->bind(':From', $args['From']);
if(!empty($args['To']))
$db->bind(':To', $args['To']);
$db->execute();
$visits = $db->fetchAllAssoc();
if(($get_assignments_only) && (empty($visits)))
continue;
if((($purpose_id) || ($associate_id) || (!empty($args['From'])) || (!empty($args['To']))) && (empty($visits)))
continue;
$tmp[$i]['HasVisits'] = (empty($visits)) ? 0 : 1;
$tmp = $schools[$i];
unset($tmp['Name']);
$schools[$i]['Address'] = build_address($tmp);
unset($schools[$i]['Add1']);
unset($schools[$i]['Add2']);
unset($schools[$i]['Add3']);
unset($schools[$i]['CityTown']);
unset($schools[$i]['CityPostCode']);
unset($schools[$i]['Name']);
unset($schools[$i]['LanguageID']);
unset($schools[$i]['PrincipalID']);
unset($schools[$i]['ContactID']);
unset($schools[$i]['TypeID']);
unset($schools[$i]['CenterID']);
unset($schools[$i]['SupportTypeID']);
unset($schools[$i]['CountyID']);
unset($schools[$i]['AreaCodeID']);
unset($schools[$i]['NetworkCodeID']);
unset($schools[$i]['RegionID']);
$returned[] = $tmp[$i];
}
return ['jct_success'=>'ok', 'response'=>$returned];
}
catch(PDOException $e)
{
return ['jct_error'=>$e->getMessage()];
}
}
Вы можете показать мне свой код ajax? – rahul
Пожалуйста, добавьте код jquery, который включает вызов AJAX. –
@Plum Я добавил соответствующие функции jquery. Я также добавлю PHP-метод ... – Eamonn