2016-01-07 10 views
10

私はこの問題に関するSAの質問のほとんどを読んでいますが、私の問題は解決していません。PHPから配列を返すときのAjax解析エラー

次のコードは、JavaScript配列をPHP5に渡しています。これは正常に動作しますが、私はAjaxコードにPHPの配列を返すとき、

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

渡された文字列化配列は

["jQuery Translator","Hello World"] 

あるPHP

EDIT

完全なPHPコードは次のとおりです。

<?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は、私には、JSONのようにしていません

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

です。私はPHP5のエキスパートではありませんが、配列を正しく埋めていないと思われます。どんな助けもありがとうございます。

+0

は 'でvar_export($換算)を行い、'、結果を投稿して下さい。 –

+0

お返事ありがとうございました。 (0 => 'Hola mundo'、) –

+0

もっと多くのPHPコードを見ることができるでしょうか?詳細:parsererrorエラー:SyntaxError:予期しないトークン配列(0 => ' jQuery Traductor' 'echo json_encode($ translated);'が2回実行されているようです。これは、一緒にいる2つのjsonArraysである文字列を生成する唯一の方法です: "[...] [...]"。 –

答えて

4
$要素のforeachの外

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

を移動し

また、$ elementのforeachの前に$translated = array();を初期化します。このよう

:; `の代わりに`エコーjson_encode($換算);

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