2016-01-07 13 views
10

Przeczytałem większość pytań dotyczących SA dotyczących tego problemu, ale żaden z nich nie rozwiązał mojego problemu.Błąd analizy składni Ajax podczas zwracania tablicy z PHP

Następujący kod przechodzi tablicę JavaScript do PHP5. Działa to dobrze, ale kiedy wrócę tablicy PHP do kodu AJAX, a

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

stringified tablica przekazywane jest

["jQuery Translator","Hello World"] 

PHP

EDIT

Kompletny kod PHP jest:

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

?> 

xhr.responseText jest

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

który nie wygląda jak json do mnie. Nie jestem ekspertem PHP5, ale podejrzewam, że nie wypełniam poprawnie tablicy. Każda pomoc jest doceniana.

+0

Wykonaj 'var_export ($ tłumaczone);' zamiast 'echo json_encode ($ tłumaczone);' a po wyniki, proszę. –

+0

Dzięki Tomas, zwrócona informacja. is: Details: parsererror Błąd: SyntaxError: nieoczekiwany token tablica (0 => ' jQuery Traductor',) array (0 => 'Hola mundo',) –

+0

Czy możemy zobaczyć więcej kodu php? Wydaje się, że 'echo json_encode ($ translated);' wykonuje dwa razy. Jest to jedyny sposób na stworzenie ciągu, który jest dwoma jsonArrays, które są razem: "[...] [...]". –

Odpowiedz

4

Przesuń

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

poza foreach $ z elementów.

Inicjuj także $translated = array(); przed foreach $ elementów.

Jak to:

$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); 
Powiązane problemy