2016-08-29 2 views
1

Так я сделал этот небольшой код здесь:Загрузка инвентаря Steam с помощью ajax, как?

<?php 
$steamData =  file_get_contents("http://steamcommunity.com/profiles/76561198258195397/inventory/json/730/2"); 
$data = json_decode($steamData, true); 
$items = $data['rgDescriptions']; 
foreach($items as $key => $item){ 
    $market_hash_name = $item["market_hash_name"]; 
    $market_hash_name = htmlentities($market_hash_name, ENT_QUOTES, 'UTF-8'); 
    $sql = "SELECT price FROM itemprice WHERE market_hash_name='".$market_hash_name."'"; 
    $result = $conn->query($sql); 
    $itemprice = "-"; 
    if ($result->num_rows > 0) 
    { 
     while($row = $result->fetch_assoc()) 
     { 
      if($row['price']>0.02){ 
       $itemprice = $row['price']; 
       $itemprice = floatval($itemprice); 
       $itemprice = $itemprice*1.05; 
      }else{ 
       $itemprice = 0; 
      } 
     } 
    } 
    echo '<div class="items"><center><img src="http://steamcommunity-a.akamaihd.net/economy/image/' . $item["icon_url"] . '" height="192" width="256"></center><div><center><h5 style="color:#'.$item["name_color"].'">'.$item["market_name"].' - <strong><b><a  style="color:green">$'.$itemprice.'</a></b></strong></h5></center></div></div>'; 
} 
?> 

Как я могу сделать этот скрипт работать с AJAX, пока он не дает некоторые данные обратно, потому что его как раз 1/10 работает?.

+0

@Mohit Tanwani (кто предложил изменить), я решил отклонить и отредактировать предлагаемое редактирование, потому что вы пропустили этот OP случайно включенный «введите код здесь» в середине их фрагмента кода. Это не должно было быть преобразовано в уценку. Однако редактирование также было довольно незначительным и могло быть достигнуто гораздо больше. – HPierce

ответ

0

Как я могу запустить этот скрипт с помощью ajax, пока он не даст некоторые данные ?

Я думаю, вы задаете неправильный вопрос здесь. Когда вы делаете запрос ajax на , ваш сервер и ваш сервер не выполняет его правильно, следует предположить, что ваш сервер совершил ошибку и что вы столкнулись с проблемой *. Однако, когда Steam не предоставит информацию, ваш сервер должен попытаться сохранить ответственность сервера Steam, а не сразу распространять проблему на код вашего клиента.

В конечном счете, проблема заключается здесь:

$steamData =  file_get_contents("http://steamcommunity.com/profiles/76561198258195397/inventory/json/730/2"); 

Вы не делают никаких проверок, чтобы убедиться, что данные, которые вы получили от Steam, это правильные данные - или даже, что эта сеть вызов удался на все ! Для этого вам нужно запрос, не тривиальный HTTP для того, чтобы проверить состояние, что означает, что вы должны избавиться от file_get_contents() и использовать функции завиток вместо того, чтобы убедиться, что запрос успешно, как ожидалось:

<?php 
do { 
    //If this isn't the first time in the loop, pause for a second to prevent spamming their servers 
    if(isset($statusCode)){ 
     sleep(1); 
    } 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, "http://steamcommunity.com/profiles/76561198258195397/inventory/json/730/2"); 
    //The curl request should return the body of the text 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    //Apparently the URL provided initially returns with a 3XX response, this option follows the redirection. 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

    $steamData = curl_exec($ch); 

    $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    //Repeat this command until we get a successful request 
    //Note that this is slightly naive - Any 2XX should be deemed successful. 
} while ($statusCode !== 200); 

$data = json_decode($steamData, true); 
//... 

Выполнение этого должно значительно улучшить те 1/10 шансов на успех, но это не означает, что успех, основанный на сетевых вызовах, по своей сути выходит из-под контроля. Если произойдет, что Steam выключится, повторная отправка запросов ajax на ваш сервер ничего не принесет и на самом деле вредна для клиента *. В этих ситуациях ваш сервер должен ответить с ошибкой HTTP 500 (то есть указывая на испорченный сервер) и отобразить пользователю сообщение об ошибке, что запрос не может быть завершен, и не попытаться перепроверить данные.

* Следует также упомянуть, что отправка нескольких запросов ajax означает, что клиент использует ограничение пропускной способности для исправления ошибки, возникшей на сервере, которая является unideal.

+0

Спасибо за это! Надеюсь, он сработает! – theofficialhb

+0

Еще раз спасибо! – theofficialhb

Смежные вопросы