2016-01-07 14 views
10

Tôi đã đọc hầu hết các câu hỏi SA liên quan đến vấn đề này, nhưng không có câu nào giải quyết được vấn đề của tôi.Lỗi phân tích cú pháp Ajax khi trả về mảng từ PHP

Đoạn mã sau đang chuyển mảng JavaScript tới PHP5. Đây hoạt động tốt, nhưng khi tôi trả lại một mảng PHP để mã ajax, một

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

Mảng chuyển đổi thành chuỗi qua là

["jQuery Translator","Hello World"] 

PHP

EDIT

Mã PHP hoàn chỉnh là:

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

?> 

Các xhr.responseText là

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

mà không giống như json với tôi. Tôi không phải là một chuyên gia PHP5, nhưng nghi ngờ tôi không làm đầy mảng một cách chính xác. Bất kỳ trợ giúp được đánh giá cao.

+0

Làm một 'var_export ($ dịch); 'thay vì' vang json_encode ($ dịch); 'và gửi kết quả, xin vui lòng. –

+0

Cảm ơn Tomas, thông tin được trả về. là: Chi tiết: parsererror Lỗi: SyntaxError: Mã thông báo không mong đợi mảng (0 => ' mảng jQuery Traductor',) (0 => 'Hola mundo',) –

+0

Chúng ta có thể xem thêm mã php không? Có vẻ như 'echo json_encode ($ translate);' đang thực thi hai lần. Đó là cách duy nhất để tạo ra một chuỗi có hai jsonArrays cùng nhau: "[...] [...]". –

Trả lời

4

Di chuyển

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

ngoài foreach của $ yếu tố.

Đồng thời khởi tạo $translated = array(); trước khi foreach của $ elements.

Như thế này:

$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); 
Các vấn đề liên quan