2013-03-08 2 views
1

Привет, У меня есть стиль, разработанный в codeigniter, и я хочу отправить xml вызовом ajax. xml исходит с другого сервера. Это Аякса на мой взглядОшибка XML на ajax POST

  xmlDoc.loadXML(xmlfromserver); 

      $(function(){ 
       $.ajax({ 
        type: "POST", 
        url: "<?php echo site_url('/backend/provider/all_country_request'); ?>", 
        data: "xml"+xmlDoc.xml, 
        async: false, 
        contentType: "text/xml", 
        dataType: "text", 
        success: function(msg) 
        { 
        alert(msg); 
        }, 
        error: function() 
        { 
        alert("error"); 
        } 
       }); 
      }); 

Это мой контроллер:

public function all_country_request(){ 
     if ($this->User_model->isLoggedIn()){ 
      $this->Travco_model->all_country_request(); 
     } 
     else{ 
      redirect('/backend/user/home/'); 
     } 
    } 

и это моя простая модель:

function all_country_request(){ 
     $xml_str = $_POST['xml']; 
     $xml = new SimpleXMLElement($xml_str); 
     foreach ($xml->DATA as $entry){    
      $data = array(
       'currency_code_travco'=>$entry->attributes()->CURRENCY_CODE, 
       'currency_name'=>$entry->CURRENCY_NAME, 
       'created'=>date('Y-m-d H:i:s'), 
       'modified'=>date('Y-m-d H:i:s'), 
     ); 
     $this->db->insert('currency_travco',$data); 
      echo '<br>'; 
     } 

    } 

Это мой XML:

<?xml version="1.0" standalone="yes"?> 
<RETURNDATA lang="it-IT" type="COR" xsi:noNamespaceSchemaLocation="http://xmlv5test.travco.co.uk/trlink/schema/CountryRequestV6Rcv.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<MESSAGE>All Countries details and relevant city details</MESSAGE> 
<DATA COUNTRY_CODE="ABW" CURRENCY_CODE="EUR"> 
    <COUNTRY_NAME>Aruba</COUNTRY_NAME> 
    <CURRENCY_NAME>euro</CURRENCY_NAME> 
</DATA> 

Ошибка, возвращающаяся ко мне, находится на изображении прилагается enter image description here

В чем проблема?

+1

Посмотрите 'PHP неопределенного index' –

+0

ok, но правильный путь? Я не знаю, является ли проблема переданной xml или переменной в post @Pekka 웃 –

+0

Какие «данные» вы хотите отправить на PHP-скрипт? Это выглядит не так: 'xml" + xmlDoc.xml, '? Вероятно, это должно быть что-то вроде 'data: {xml:" ... некоторые XML-данные .... "}' –

ответ

1

Любой вид ввода ваши PHP скрипты будут принимать вам нужно правильно проверить, прежде чем продолжить.

В вашем случае более подробный вариант может выглядеть следующим образом:

try { 
    if (!isset($_POST['xml'])) { 
     throw new Exception('Missing Parameter Attribute "xml"'); 
    } 
    $mode = libxml_use_internal_errors(true); 
    $xml = new SimpleXMLElement($_POST['xml']); 
} catch (Exception $e) {   
    $code = 400; 
    $phrase = 'Bad Request'; 
    header(sprintf('HTTP/ %d %s', $code, $phrase), true, $code); 

    $response     = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><response/>'); 
    $response->status->phrase = $phrase; 
    $response->status->code = $code; 
    $response->message = $e->getMessage(); 
    if ($errors = libxml_get_errors()) { 
     $responseErrors = $response->addChild('errors'); 
     foreach($errors as $error) { 
      $responseError = $responseErrors->addChild('error'); 
      foreach($error as $name => $value) { 
       $value && $responseError->$name = rtrim($value); 
      } 
     } 
    } 
    header('Content-Type: application/my-app-response-bucket+xml; charset=utf-8'); 
    $response->asXML('php://STDOUT'); 
    return; 
} 


foreach ($xml->DATA as $entry) { 
    $data = array(
     'currency_code_travco' => $entry->attributes()->CURRENCY_CODE, 
     'currency_name'  => $entry->CURRENCY_NAME, 
     'created'    => date('Y-m-d H:i:s'), 
     'modified'    => date('Y-m-d H:i:s'), 
    ); 
    $this->db->insert('currency_travco', $data); 
    echo '<br>'; 
} 

... 

Для ОШИБОК состояния служит запрос, который отсутствует или неверные данные (Bad Request) надлежащий ответ возвращается. Он даже имеет тело ответа, состоящее из ошибок, освещающих XML, например недостающие данные:

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <status> 
    <phrase>Bad Request</phrase> 
    <code>400</code> 
    </status> 
    <message>Missing Parameter Attribute "xml"</message> 
</response> 

или в случае отсутствия хорошо сформированный XML (<?xml ?><fa ke></fa>blurb) при условии:

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <status> 
    <phrase>Bad Request</phrase> 
    <code>400</code> 
    </status> 
    <message>String could not be parsed as XML</message> 
    <errors> 
    <error> 
     <level>3</level> 
     <code>96</code> 
     <column>6</column> 
     <message>Malformed declaration expecting version</message> 
     <line>1</line> 
    </error> 
    </errors> 
    <errors> 
    <error> 
     <level>3</level> 
     <code>41</code> 
     <column>13</column> 
     <message>Specification mandate value for attribute ke</message> 
     <line>1</line> 
    </error> 
    </errors> 
    <errors> 
    <error> 
     <level>3</level> 
     <code>5</code> 
     <column>16</column> 
     <message>Extra content at the end of the document</message> 
     <line>1</line> 
    </error> 
    </errors> 
</response> 
+0

Спасибо, что я могу хорошо отладить мой код и найти проблему! –

1

Отправить XML-документ как данные на сервер. Вы должны установить опцию processData на false, предотвращается автоматическое преобразование данных в строки. , например:

$.ajax({ 
    url: "page.php", 
    processData: false, 
    data: xmlDocument 
}); 

Good Luck,

+0

и после того, как получить Это не данные: xml = xmlDocument ?? Или нет? –

+0

попробуйте как: 'var xmlDocument = [создать XML-документ]; var xmlRequest = $ .ajax ({ url: "page.php", processData: false, данные: xmlDocument }); xmlRequest.done (handleResponse); ' –

+0

проблема в файле page.php, как получить данные, переданные? –

Смежные вопросы