2016-07-11 3 views
-1

Мне нужен способ извлечения данных из сценария обработки на страницу запроса с использованием Ajax, PHP. Код ниже показывает эту ошибку:Извлечь результат из процесса Ajax

SyntaxError: JSON.parse: unexpected character at line 1 column 13 of the JSON data
var data4=JSON.parse(data4);

Пожалуйста, обратите внимание, что у меня есть поиск, но не удалось найти решение. Итак, я подумал, что, возможно, есть способ передать результат на запрашивающую страницу, не используя json_encode.

<script type="text/javascript" src="includes/scripts/newJquery.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $("select.partno").change(function() { 
      var selectedCustomer = $(".partno option:selected").val(); 
      $.ajax({ 
       type: "POST", 
       url: "process-grpid.php", 
       dataType: "json", 
       data: { 
        custid: selectedCustomer 
       } 
      }).done(function(data4) { 
       var data4 = JSON.parse(data4); //Error Area 
       //using php-mysql before 
       $("#desc").html(data4.ref); 
       $("#purch").html(data4.lprice); 

      }); 
     }); 
    }); 
</script> 
<form> 
    <table> 
     <tr> 
      <th>Item Code/Part NO:</th> 
      <?php 
      include("db_connection.php"); 
      $s = mysqli_query($connection,"SELECT * FROM tab_stock ORDER BY itemName ASC");?> 
       <td> 
        <select name="partno" class="partno"> 
         <option>Select PartNo</option> 
         <option value="N/A">N/A</option> 
         <?php while($rw = mysqli_fetch_array($s)){ ?> 
          <option value="<?php echo $rw['itemName'];?>"> 
           <?php echo $rw['itemName'];?> 
          </option> 
          <?php };?> 
        </select> 
       </td> 
       <th>Description:</th> 
       <td id="desc"></td> 
     </tr> 
     <tr> 
      <th>Last Purchase Price:</th> 
      <td id="purch"></td> 
     </tr> 
    </table> 
</form> 

Процесс-grpid.php (обработка сценария)

<?php  
    if (isset($_POST["custid"])) {    
     include 'includes/session.php'; 
     include 'includes/db_connection.php'; 
     include 'includes/functions.php'; 
     $partid = $_POST["custid"]; 
     if ($partid !== 'Select PartNo') { 
      $gets = "SELECT * FROM tab_stock WHERE itemName='" . $partid . "'"; 
      $get = mysqli_query($connection, $gets); 

      $row = mysqli_fetch_array($get); 
      $desc = $row['description']; 
      $lprice = $row['Rate']; 
      if ($partid == 'N/A') { 
       $res["sta"] = 0; 
       $res["ref"] = "<input type='text' class='desc' name='descr' size='50' required='required'/>"; 
       $res["lprice"] = "<input type='text' id='puch' name='lastpur' required='required'/>"; 
      } else { 
       $res["sta"] = 1; 
       $res["ref"] = "<input type='text' value='$desc' class='desc' name='descr' size='50' readonly='readonly' required='required'/>"; 
       $res["lprice"] = "<input type='text' id='puch' name='lastpur' value='$lprice' readonly='readonly' required='required'/>"; 

      } 
      echo json_encode($res); 
     }    
    } 
?> 

При запуске этого приложения, она показывает ошибку SyntaxError: JSON.parse: неожиданный символ в строке 1 колонки 13 JSON данные var data4 = JSON.parse (data4) Но при проверке с помощью Firebug в HTML и RESPONSE TAB отображается ожидаемый результат. Вопрос: какой альтернативный способ получить результат от скрипта обработки на запрашивающей странице, со значением uisng json_encode и JSON.parse (response)?

+0

Может быть у вас есть белые-пространства после?> Пытаются убрать его –

+0

@ KostyaShkryob: пробел после?> из какого сценария. Сценарий обработки или что? – Dave

+0

@ JoseManuelAbarcaRodríguez: Да, у них есть правильный формат. – Dave

ответ

0

Попробуйте удалить

dataType: "json" 

из Аякса вызова

Update: Если конфигурация DATATYPE: JSON, вы получите JavaScript Object больше не является необходимым JSON.parse

0

Я взял ваш код и сделал несколько тестов. Следующий код работает для меня:

test.html

<html> 
    <head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
    <script type = "text/javascript"> 
function myAjax() { 
var selectedCustomer = 1;        // DATA FOR PHP. 
$.ajax({ type : "POST", 
      url : "test.php", 
      data : { "custid" : selectedCustomer },  // DATA FOR PHP. 
      success: function (data4) { 
      var data4 = JSON.parse(data4); 
      alert(data4.custid); 
      alert(data4.sta); 
      alert(data4.ref); 
      alert(data4.lprice); 
      $("#desc").html(data4.ref);    // <TD> IN <BODY>. 
      }, 
      error: function (xhr) { 
      alert("error"); 
      } 
     }); 
} 
    </script> 
    </head> 
    <body> 
    <button onclick="myAjax()">echo hello</button> 
    <table> 
     <tr> 
     <td id="desc"></td> 
     </tr> 
    </table> 
    </body> 
</html> 

test.php

<?php 
if (isset($_POST[ "custid" ])) 
    { $res = array(); 
    $res["custid"] = $_POST[ "custid" ]; 
    $res["sta"] = 2; 
    $res["ref"] = "<input type='text' class='desc' name='descr' size='50' required='required'/>"; 
    $res["lprice"] = "<input type='text' id='puch' name='lastpur' required='required'/>"; 
    echo json_encode($res); 
    } 
?> 

Обратите внимание, я удалил АЯКС линию dataType : "json",, потому что как только я включил его это код вызывает ошибку. Скопируйте предыдущие коды в два файла под названием «test.html» и «text.php», они работают нормально.

+0

Откуда этот код? я не вижу его в коде op. –

+0

нет ... вы принципиально изменили его, ваш не включает ajax, где на самом деле это строка json, возвращаемая с php, которая должна быть проанализирована. это просто то, что jQuery делает эту часть для вас. –

0

Вместо

echo json_encode($res); 

Использование:

echo json_encode(array('res' => $res)); 

И вместо:

var data4 = JSON.parse(data4); 

Использование:

var d = data4.res; 

И чем использовать «d», как массив. Вот код JS Я пытаюсь сказать вам:

$(document).ready(function() { 
    $("select.partno").change(function() { 
     var selectedCustomer = $(".partno option:selected").val(); 
     $.ajax({ 
      type: "POST", 
      url: "process-grpid.php", 
      dataType: "json", 
      data: {custid: selectedCustomer} 
     }).done(function(data4) { 
      var d = data4.res; 
      $("#desc").html(d['ref']); 
      $("#purch").html(d['lprice']); 

     }); 
    }); 
}); 

Если еще есть ошибка, это, вероятно, в использовании «г» и вы можете изменить d [ «реф»] для d [1 ] и d ['lprice'] - d [2].

Я вижу, что при попытке объединить $ desc и $ lprice с входными строками также существует ошибка.

$res["ref"] = "<input type='text' value='" . $desc. "' class='desc' name='descr' size='50' readonly='readonly' required='required'/>"; 
$res["lprice"] = "<input type='text' id='puch' name='lastpur' value='" . $lprice . "' readonly='readonly' required='required'/>"; 

И плюс ... если вы используете эти переменные только если $ PartID! = «N/A», почему бы вам не переместить запрос внутри еще даного? Выполняя это, вы избегаете выполнения запроса все время.

if ($partid !== 'Select PartNo') { 

     if ($partid == 'N/A') { 

      $res["sta"] = 0; 
      $res["ref"] = "<input type='text' class='desc' name='descr' size='50' required='required'/>"; 
      $res["lprice"] = "<input type='text' id='puch' name='lastpur' required='required'/>"; 
     } else { 
      $gets = "SELECT * FROM tab_stock WHERE itemName='" . $partid . "'"; 
      $get = mysqli_query($connection, $gets); 
      $row = mysqli_fetch_array($get); 

      $res["sta"] = 1; 
      $res["ref"] = "<input type='text' value='" . $row['description'] . "' class='desc' name='descr' size='50' readonly='readonly' required='required'/>"; 
      $res["lprice"] = "<input type='text' id='puch' name='lastpur' value='" . $row['Rate'] . "' readonly='readonly' required='required'/>"; 

     } 
     echo json_encode($res); 
    } 
+0

Показывает TypeError: данные не определены – Dave

+0

Я обновил свой ответ с большим количеством кода. Надеюсь, теперь это сработает. –

+0

Не отображается никаких ошибок. но он не отобразил результат на запрошенной странице. Но вы используете Firebug на fireefox и проверяете HTML, вкладку RESPONSE, корректно отображается правильный результат JSON. Итак, почему он не отображается на запрошенной странице? – Dave

0

Попробуйте не использовать JSON.parse вообще ... как вы получите родной JavaScript Object назад, а не JSON строка ...

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