2017-01-13 2 views
-1

Мы используем php-framework «slim» для создания интернет-магазина. Теперь мы сталкиваемся с проблемой, что мы можем отправить запрос на сервер и изменить базу данных (мы проверили таблицу, и она действительно изменилась), в то время как веб-конец не может получить ответ из базы данных (iOS и endroid могут оба получить его). Вот часть кода, который отправляет запрос, обновляет базу данных и получает ответ:не может получить ответ от сервера в slim

$app->post('/tblUser', function($request, $response, $args) { 
    get_tblUser_id($request->getParsedBody()); 
}); 
function get_tblUser_id($data) 
{ 
    $db = connect_db(); 
    $sql = "update tblphoneverify set dtCreate = NOW() where strPhone = $data[phone]"; 
    $db->query($sql); 
    $updateId = $db->affected_rows; 
$db = null; 
    $msg = array(
     'stat' => '', 
     'msg' => '' 
    ); 
    $msg['stat'] = '1'; 
    $msg['msg'] = 'registration success'; 
    return json_encode($msg); 
} 

этот Аякса сегмент запускающее событие щелчка, чтобы выполнить запись и получает состояние результата:

$(function(){ 
    $("#getcheck").click(function(){ 
    $.ajax({ 
     type:"post", 
     url:"http://192.168.1.108/blue/public/tblUser", 
     data: {"phone":"13331111111"}, 
     dataType:"json", 

     //async:false, 
     contentType: "application/x-www-form-urlencoded", 

     success:function(data){ 
     alert(1); 
     }, 
     error:function(XMLHttpRequest, textStatus, errorThrown){ 
     alert(XMLHttpRequest.readyState); 
     alert(XMLHttpRequest.status); 
     alert(XMLHttpRequest.statusText); 
     alert(XMLHttpRequest.responseText); 
     alert(textStatus); 
     alert(errorThrown); 
     } 
    }) 
    }) 
}) 

код всегда пропускает часть «success» и сразу переходит к «ошибке». Итак, что не так с нашим кодом? Заранее спасибо.

+0

Посмотрите на консоль JavaScript для сообщений об ошибках. –

+0

Вы не повторяете строку, закодированную json, так что, возможно, запрос ajax переходит к ошибке, потому что нет json, что он может разобрать – jmattheis

ответ

0

Необходимо отправить ответ от маршрута, подлежащего вызову. Не делайте json_encode, а не Slim.

Во-первых, вернуть массив из get_tblUser_id:

function get_tblUser_id($data) 
{ 
    $db = connect_db(); 
    $sql = "update tblphoneverify set dtCreate = NOW() where strPhone = $data[phone]"; 
    $db->query($sql); 
    $updateId = $db->affected_rows; 
    $db = null; 
    $msg = array(
     'stat' => '', 
     'msg' => '' 
    ); 
    $msg['stat'] = '1'; 
    $msg['msg'] = 'registration success'; 
    return $msg; 
} 

Обратите внимание, что у вас есть инъекционный уязвимость SQL здесь. Измените SQL на что-то вроде этого:

$sql = "update tblphoneverify set dtCreate = NOW() where strPhone = ?"; 
    $db->query($sql, [$data[phone]]); 

Далее вам нужно отправить ответ как JSON с указанного маршрута. Тонкий имеет способ сделать это:

$app->post('/tblUser', function($request, $response, $args) { 
    $msg = get_tblUser_id($request->getParsedBody()); 

    return $response->withJson($msg); 
}); 

Тонкий теперь будет отправить обратно свой msg в массив с правильным набором заголовка типа содержимого, которое должно помочь вашему JavaScript, чтобы расшифровать его.

+0

Мы исправили ошибку, и речь шла о междоменном. Я посоветую вам совет. Кроме того, большое спасибо за напоминание о SQL и тонком методе. –