2016-08-04 10 views
1

Ich versuche, die JSON-Ergebnisse eines PHP-API-Aufrufs an eine Funktion zu übergeben, die die Ergebnisse in der Ansicht anzeigen wird.PHP-Echo-Ergebnis an Javascript-Funktion übergeben und in Sicht anzeigen?

script.js Funktion

function ajaxProductsSearch() { 

    products.empty(); 
    preloader.css('visibility', 'visible') 

    // Issue a request to the proxy 
    $.post('test.php', { 
      'search': searchBox.val() 
     } 

     function($results) { // pass $results from test.php? 
      if ($results.results_count == 0) { 

       preloader.css('visibility', 'hidden'); 
       message.html("We couldn't find anything!").show(); 
       return false; 
      } 

      $.each() { // code to display in view? 

       // var html = ''; 
       // products.append(html); 
      }; 

      preloader.css('visibility', 'hidden'); 
     }, 'json'); 
} 

Grundsätzlich Geben Sie einen Suchbegriff in Textfeld in der Ansicht und script.js wird die Zeichenfolge in die test.php Skript schreiben, die dann von echo $results die API-Abfrage-Anforderung und zeigt die Ergebnisse ausgeführt werden soll.

+0

Was ist das Problem ...? –

+1

Sie haben ein Komma zwischen Funktion ($ resultate) und Rest von $ .post verpasst. – Syncro

+0

Was macht es, anstatt den AJAX-Anruf zu tätigen? Gibt es Fehler in der Javascript-Konsole? – Barmar

Antwort

1

Dies zeigt zunächst Ihre Ergebnisse an, so dass Sie mit Ihrer Entwicklung fortfahren können.

function($results) { // pass $results from test.php? 
    if ($results.results_count == 0) { 
     ... 
    } 

    // toString won't provide a nice output, but it will 
    // show your results object. Handling the results is 
    // dependent on the structure of your object. 
    message.html($results.toString()); 
} 

Ich empfehle, die Nachricht durch ein jQuery-Objekt zu ersetzen, das auf ein Containerelement Ihrer Suchergebnisse verweist.

z. <div id="search-results"></div> und $("#search-results").html($results).

Es ist stilistisch besser, ein JSON-Objekt von Ihrem PHP zurückzugeben und dieses mit Ihrem Javascript zu analysieren, aber ich nehme an, dass Sie gerade eine Zeichenkette mit Ihren Ergebnissen gerade zurückgeben.

Ich rate Ihnen diese Funktionen nachschlagen:

  • PHP json_encode()
  • jQuery $.parseJSON()
+0

'$ results.results_count' impliziert, dass' $ results' ein Objekt ist. Aber 'message.html ($ results)' benötigt eine HTML-Zeichenfolge. Es kann nicht beides sein. – Barmar

+0

Es ist definitiv ein String, '$ .post' gibt Strings zurück. In js können Sie den String-Prototyp erweitern, ich nehme an, dass Brett irgendwo einen 'String.prototype.results_count = ...' hat. – Joundill

+2

Er hat '' json'' als 'dataType'-Argument für' $ .post() '. Damit wird 'JSON.parse() 'in der Antwort aufgerufen, bevor die Callback-Funktion aufgerufen wird. – Barmar

0

aktualisieren

ich es endlich, unten zu arbeiten, ist der Code wenn jemand interessiert ist. Ich war mir nicht sicher, ob ich $results von test.php zu einer Funktion in script.js übergeben könnte. console.log($results) hat bestätigt, dass die API-Abfrage erfolgreich war und in $results gespeichert wurde.

function ajaxProductsSearch(){ 

    products.empty(); 
    preloader.css('visibility','visible'); 

    // Issue a request to the proxy 
    $.post('test.php', { 
     'search' : searchBox.val() 
    }, 
    function($results) { // pass $results from test.php? 

     console.log($results); 
     if($results.results_count == 0){ 

      preloader.css('visibility','hidden'); 
      message.html("We couldn't find anything!").show(); 
      return false; 
     } 

     $.each($results.results, function(i,item) { // code to display in view? 


      var html = '<a class="product" data-price="$ '+$results.results[i].price+'" href="'+$results.results.url+'" target="_blank">'; 

      console.log($results.results[0]); 
      // If the product has images 
      if($results.results[i].images && $results.results[i].images.length > 0){ 
       html += '<img alt="'+$results.results[i].name+'" src="'+ $results.results[i].images+'"/>'; 
      } 

      html+='<span>'+$results.results[i].name.substr(0, 20)+'</span></a> '; 
      products.append(html); 
     }); 

     preloader.css('visibility','hidden'); 

    },'json'); 
}