2016-07-08 25 views
0

Ich habe eine PHP-Datei, die den letzten Preis und die Beschreibung des Artikels bei Auswahl eines Artikelcodes aus einer Dropdown-Liste abruft.Abrufen von Daten mit Ajax

Die Ausgabe:

Wenn die Anforderung auf dem vorderen Ende gebildet wird, wird die Anforderung an die Verarbeitungs Seite gesendet, die eine JSON Daten zurückgibt.

Es funktioniert perfekt auf meinem lokalen Windows-Server. Nach der Migration auf einen Server Live Windows, wirft er den Fehler wie folgt aus:

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

Wenn ich das Element mit Firebug auf Firefox-Browser kontrollieren, ich feststellen, dass die Verarbeitung Skript 200K OK 581ms zeigt, die die Verarbeitung Skript anzuzeigen, fein. Aber unter dieser ist dieser Fehler von:

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

Wenn ich weiter geprüft, um die Verarbeitung Skript, das in Ordnung ist, auf der Antwort und HTML-TAB, zeigt das erwartete Ergebnis, die angeblich zeigen auf der anfordernden (Front-End) Seite.

Ich brauche Hilfe, herauszufinden, warum das passiert. Bitte finden Sie die folgenden Seiten.

Front-end-Seite Skript:

<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",data:{custid:selectedCustomer}}).done(function(data4){ 
      var data4=JSON.parse(data4); 
      //using php-mysql before 
      if(data4.sta == 0){ 
      $("#desc").html(data4.ref); 
      $("#purch").html(data4.lprice); 
      }else{ 
      $("#desc").html(data4.ref); 
      $("#purch").html(data4.lprice); 

      } 
     }); 
    }); 
    }); 
    </script> 

Prozess grpid.php Skript:

<?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); 
      } 

     } 

enter image description here

+0

'var data4 = JSON.parse (data4)' -> Sie haben die Variable data4 nicht definiert und trotzdem eine Funktion darauf ausgeführt? –

+0

@SuperCoolHandsomeGelBoy Es wird ein Funktionsparameter schattiert. – gcampbell

+0

Zuerst löschen Sie die Var. Zweitens, zeigen Sie den Code in Fiddle, so dass wir leichter debuggen können, oder direkt mit uns auf Ihre Website –

Antwort

0

Ein Grund der Konsole 200OK zurückkehrt, weil die angeforderten Server ist da, aber die Antwort, die es erwartet (JSON) war nicht gültig.

Sie haben auch nicht die dataType:'json' in Ihrer AJAX-Anfrage angegeben, die besagt, dass Sie JSON-Daten und nicht nur reinen Text erwarten.

+0

OP hat bereits verwendet ' JSON.parse', um den Text in JSON zu konvertieren. –

+0

Aber in der Tat kann die JSON ungültig sein –

+0

Hier ist ein Beweis dafür - http://www.valtira.com/valtira-blog/valtira-blog-the-importance-of-valid-JSON – graceth

0

Es scheint, Sie deklarieren data4 zweimal, einmal in der Funktion def function(data4) und dann wieder unter var data4=.... Es sollte funktionieren, wenn Sie separate Variablennamen verwenden. Es ist eine gute Idee, die Verwendung eines Variablennamens in zwei verschiedenen Kontexten in derselben Funktion zu vermeiden.

$.ajax({type: "POST", 
    url:"process-grpid.php", 
    data: 
    { 
     custid:selectedCustomer 
    } 
}).done(function(response){ 

     var data4 = JSON.parse(response); 

     if(data4.sta == 0){ 
      $("#desc").html(data4.ref); 
      $("#purch").html(data4.lprice); 
     }else{ 
      $("#desc").html(data4.ref); 
      $("#purch").html(data4.lprice); 

     } 
}); 

Eine Sache zu berücksichtigen ist, dass JS JSON nativ versteht. Das heißt, Sie müssen JSON.parse nicht verwenden. Sie müssen nur sagen, dass JSON dataType: 'json', erwartet wird. Ich würde success: anstelle von done() verwenden. done() funktioniert möglicherweise nicht wie erwartet, da es nicht auf den Erfolg ankommt. Ich würde auch eine truthy if Aussage verwenden. Auch Ihre if und else-Anweisungen machen dasselbe. Eine davon scheint unnötig zu sein. Zuletzt fügen Sie einen Fehlerrückruf hinzu.

$.ajax({ 
    type: "POST", 
    url: "process-grpid.php", 

    dataType: 'json', // expected dataType of the response 

    data: { 
     custid: selectedCustomer 
    }, 
    success: function(response) { 

     var data4 = response; 

     if (data4.someValueThatShouldBePresent) { 
      $("#desc").html(data4.ref); 
      $("#purch").html(data4.lprice); 
     } else { 
      $("#desc").html(data4.ref); 
      $("#purch").html(data4.lprice); 

     } 
    }, 
    error: function(request, error) { 
      // This callback will trigger on an unsuccessful request 
      alert('Unable to connect, try again. '); 
     } 
}); 
+0

Ich habe die Änderungen vorgenommen. noch anzeigen: Json.Parse Error.Any weitere Hilfe? – Dave

+0

Ich habe meine Antwort so bearbeitet, dass sie mehr mit dem übereinstimmt, was ich tatsächlich mache. Ich würde auch überprüfen, dass 'process-grpid.php' tatsächlich JSON zurückgibt, indem $ _POST zu $ ​​_REQUEST geändert und ein GET in der Adressleiste eines Browsers erstellt wird. –

+0

Sie müssen * direkt auf den JSON-Datenstrom schauen. * Das könnte so einfach sein wie das Hinzufügen einer Popup-Nachricht zu dem Code, der sie empfängt, bevor sie versucht, sie zu dekodieren. Die Software sagt Ihnen, dass ein Fehler darin enthalten ist. ### Außerdem stimme ich ausdrücklich * nicht damit überein, dass Sie 'JSON.parse' nicht verwenden sollten: obwohl das JSON-Format direkt auf JavaScript-Syntax basiert, gibt es ein Potenzial für JavaScript-Code-Injection, wenn Sie einfach" bewerten Sie, was Sie bekommen. ("Sei nicht * das * Vertrauen auf irgendetwas überall ...") Es gibt dir auch "zuverlässige Erkennung von Fehlern wie diesen!" –