2014-04-19 4 views
1

J'essaie d'obtenir les données en utilisant AJAX. Mon code est ci-dessous. Fondamentalement ce que j'essaye de faire est: Le premier élément contient HTML et le deuxième élément contient un autre tableau JSON avec les données à l'intérieur. Le 2ème élément de travail trouve, mais le 1er élément n'a donné aucun résultat. Si j'écris le code comme ceciAucun retour de HTML en utilisant AJAX

$html = $cont[0][0]; 

Il renvoie les résultats quand j'écrire du code comme celui-ci

$html = '<div>This is Html</div>'; 

Maintenant, je ne savais vraiment pas pourquoi cela arrive. Si je echo le premier code style il montre les données, mais ne l'a pas passé.

script Code

<script> 
function get_data_from_rul() { //alert('ting'); 
    var post_url = jQuery('#prod_url').val(); 
    //alert('hmm');  
    jQuery.ajax({ 
     url: 'ajax.php', 
     type: 'post', 
     data: {'post_url': post_url}, 
     dataType: "json", 
     success: function(serverResponse) { 
      //location.reload(); 
      //console.log(data); 
      jQuery('#prod_detail').val(serverResponse.html); 
      var data = JSON.parse(serverResponse.data); 


      jQuery('#meta_description').val(data.description); 
      jQuery('#meta_keyword').val(data.keywords); 
      jQuery('#prod_title').val(data.page_title); 

     } 


    }); 
} 
</script> 

Code HTML:

<input type="text" id="prod_url" name="prod_url" class="large" onkeyup="get_data_from_rul();" /> 
<br /> 
<textarea id="meta_description" rows="8" cols="90"></textarea><br /> 
<textarea id="meta_keyword" rows="8" cols="90"></textarea><br /> 
<textarea id="prod_title" rows="8" cols="90"></textarea><br /> 
<textarea id="prod_detail" rows="8" cols="90"></textarea> 

Code ajax.php:

<?php 

    $url = $_REQUEST['post_url']; 

function get_web_page($url) 
{ 
    $options = array(
     CURLOPT_RETURNTRANSFER => true,  // return web page 
     CURLOPT_HEADER   => false, // don't return headers 
     CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
     CURLOPT_ENCODING  => "",  // handle all encodings 
     CURLOPT_USERAGENT  => "spider", // who am i 
     CURLOPT_AUTOREFERER => true,  // set referer on redirect 
     CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
     CURLOPT_TIMEOUT  => 120,  // timeout on response 
     CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
    ); 

    $ch  = curl_init($url); 
    curl_setopt_array($ch, $options); 
    $content = curl_exec($ch); 
    $err  = curl_errno($ch); 
    $errmsg = curl_error($ch); 
    $header = curl_getinfo($ch); 
    curl_close($ch); 

    $header['errno'] = $err; 
    $header['errmsg'] = $errmsg; 
    $header['content'] = $content; 
    return $header; 
} 

$result = get_web_page($url); 

preg_match('/<title>(.+)<\/title>/',$result['content'],$matches[]); 
preg_match('/<div id="specs-list">([^`]*?)<\/div>/',$result['content'],$cont[]); 

$tags = get_meta_tags($url); 

$keywords  = $tags['keywords']; 
$description = $tags['description']; 
$page_title  = $matches[0][1]; 

$html = $cont[0][0]; 
$data = json_encode(array('keywords'=>$keywords,'description'=>$description,'page_title'=>$page_title)); 
$response = array('html'=>$html, 'data'=>$data); 
echo json_encode($response); 
+0

Pourquoi ajouter des parenthèses au dernier argument dans preg_match, supprimer '[]' de la fin. – adeneo

+0

Je l'ai fait mais ça ne marche pas. et je ne pense pas que cela ait un effet. Mais comment je l'essaie mais toujours pas de résultats. Merci –

Répondre

0

Pourquoi vous avez appelé twi ce json_encode en $data et en $response? Vous devriez seulement sur $response pour appeler json_encode.

Etes-vous sûr que vous devriez être sur le premier tableau $cont[0][0] peut-être pas dans $cont[0] à la place?

preg_match('/<div id="specs-list">([^`]*?)<\/div>/',$result['content'],$cont); // Remove this [] braces, it is not neccessary, on code after you should check array 

Partie:

$tags = get_meta_tags($url); 

$keywords  = $tags['keywords']; 
$description = $tags['description']; 
$page_title  = $matches[0][1]; 

if (isset($cont[0][0]) 
{ 
    $html = $cont[0][0]; 
    // echo($cont[0][0]); // Uncomment to check if you really have results. 
} 

// If you are not sure of returned result check with print_r and find array 
// var_dump(isset($cont[0][1])); .... 

$data = (array('keywords'=>$keywords,'description'=>$description,'page_title'=>$page_title)); 
$response = array('html'=>$html, 'data'=>$data); 
echo json_encode($response); 

Je ne sais pas, mais espérons que cette aide.

+0

NO ayant le même problème. il y a de la valeur en $ html mais comme je l'explique ci-dessus, comment ça marche. –

+0

Qu'est-ce que vous avez quand 'var_dump ($ cont);'? –