2016-01-07 5 views
10

Ich habe die meisten der SA Fragen zu diesem Thema gelesen, aber keine haben mein Problem gelöst.Ajax Parse Fehler beim Zurückgeben Array von PHP

Der folgende Code übergibt ein JavaScript-Array an PHP5. Dies funktioniert gut, aber wenn ich einen PHP-Array auf den Ajax-Code zurückgeben, ein

parserror: unexpected token "[" is returned. 

JS

 $(function() { 
      translate($("h1,p")); 
      function translate(selection$) { 
       var elements = []; 
       for (i = 0; i < selection$.length; i++) { 
        elements.push(selection$.get(i).outerHTML); 
       } 
       var jString = JSON.stringify(elements); 
       $.ajax({ 
        url: 'test.php', 
        type: 'post', 
        data: { 'data': jString }, 
        cache: false, 
        dataType: 'json', 
        success: function (data, status) { 
         $("#after").append(data); 
        }, 
        error: function (xhr, desc, err) { 
         alert("Details: " + desc + "\nError: " + err + "\n" + xhr.responseText); 
        } 
       }); // end ajax call 
      } 
     }); 

Die Zeichenfolgegebene Array ist

["jQuery Translator","Hello World"] 

PHP

EDIT

Der komplette PHP-Code ist:

<?php 
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 

if('POST' == $_SERVER['REQUEST_METHOD']) 
{ 
    include 'HttpTranslator.php'; 
    include 'AccessTokenAuthentication.php'; 
    if (!empty($_POST['data'])) { 
     $elements = json_decode($_POST['data']); 
    } 
    $auth = new AccessTokenAuthentication(); 
    $authHeader=$auth->authenticate(); 
    $fromLanguage = "en"; 
    $toLanguage = "es"; 
    $contentType = 'text/html'; 
    $category  = 'general'; 
    //Create the Translator Object. 
    $translatorObj = new HTTPTranslator(); 
    foreach ($elements as $element) { 
     $params = "text=".urlencode($element)."&to=".$toLanguage."&from=".$fromLanguage; 
    $translateUrl = "http://api.microsofttranslator.com/v2/Http.svc/Translate?$params"; 
     //Get the curlResponse. 
     $curlResponse = $translatorObj->curlRequest($translateUrl, $authHeader);  
     //Interprets a string of XML into an object. 
     $xmlObj = simplexml_load_string($curlResponse); 
     $translated = array(); 
     foreach((array)$xmlObj[0] as $val){ 
      array_push($translated, $val); 
     } 
     header('Content-type: application/json'); 
     var_export($translated); 
    } 
} 

?> 

Die xhr.responseText ist

"["<h1>jQuery Traductor<\/h1>"]["<p>Hola mundo<\/p>"]" 

die wie json mir schaut nicht. Ich bin kein PHP5-Experte, aber ich vermute, dass ich das Array nicht richtig fülle. Jede Hilfe wird geschätzt.

+0

Sie einen 'var_export ($ übersetzt);' statt 'Echo json_encode ($ übersetzt);' und die Ergebnisse veröffentlichen, bitte. –

+0

Danke Tomas, die zurückgegebene Info. ist: Details: parsererror Fehler: SyntaxError: Unerwartetes Token ein Array (0 => ' jQuery Traductor',) Array (0 => 'Hola mundo',) –

+0

Könnten wir mehr PHP-Code sehen? Es scheint, dass 'echo json_encode ($ übersetzt);' zweimal ausgeführt wird. Das ist der einzige Weg, um einen String zu erzeugen, der aus zwei zusammengesetzten jsonArrays besteht: "[...] [...]". –

Antwort

4

das Verschieben

header('Content-type: application/json'); 
    var_export($translated); 

außerhalb der foreach von Elementen $.

Initialisieren Sie auch $translated = array(); vor der foreach von $ -Elementen.

So:

$translated = array(); 
foreach ($elements as $element) { 
    $params = "text=".urlencode($element)."&to=".$toLanguage."&from=".$fromLanguage; 
    $translateUrl = "http://api.microsofttranslator.com/v2/Http.svc/Translate?$params"; 
    //Get the curlResponse. 
    $curlResponse = $translatorObj->curlRequest($translateUrl, $authHeader);  
    //Interprets a string of XML into an object. 
    $xmlObj = simplexml_load_string($curlResponse); 

    foreach((array)$xmlObj[0] as $val){ 
     array_push($translated, $val); 
    } 

} 

header('Content-type: application/json'); 
var_export($translated);