2017-09-07 5 views
1

jqueryコードをプレーンなjavascriptに置き換えようとしています。ディレクトリから画像を収集してjsonを出力するphpがあります。コードが表示されるパスを投稿する必要があります応答を得る前に画像のために。 これは私が何をそのエラーを知らない私は、これはPHPコードjson formated phpをバニラのjavascriptで取得する

<?php 
// 
$dir = $_POST['img_path']; 
// 
if(is_dir($dir)) 
{ 
    if($dh = opendir($dir)) 
     while(($file = readdir($dh)) != false) 
      if($file != "." and $file != ".." and $file != ".DS_Store" and $file != "zoom") $files_array[] = array('file' => $file); 
    $return_array = array('images' => $files_array); 
    // 
    header('Content-type: application/json'); 
    echo json_encode($return_array); 
} 

あるPHPファイルを読み込む

Uncaught SyntaxError: Unexpected token < in JSON at position 0 
at JSON.parse (<anonymous>) 
at XMLHttpRequest.xhr.onreadystatechange 

というエラーが出る私は

let imgpath = '&img_path=img/' + directory  
    loadJSON(dataUrl, successJson, errorJson); 
    function successJson(data) 
    { 
     console.log(data); 
    }; 
    function errorJson(xhr) 
    { 
     console.log('Error :('); 
    }; 
    // 
    function loadJSON(path, success, error) 
    { 
     var xhr = new XMLHttpRequest(); 
     xhr.open("POST", path, true); 
     xhr.setRequestHeader('Content-Type', 'application/json'); 
     xhr.onreadystatechange = function() 
     { 
      if(xhr.readyState === XMLHttpRequest.DONE) 
      { 
       if((xhr.status === 200 || xhr.status === 0) && success) success(JSON.parse(xhr.responseText)); 
       else{if(error) error(xhr);} 
      } 
     }; 
     xhr.send(imgpath); 
    } 

を持っているjsのです手段。

は、ここでは、HTML文字列(<で始まる)の代わりに、JSON文字列を受けています

$.ajax({ 
     type: 'POST', 
     url: dataUrl, 
     data: imgpath, 
     beforeSend: function(xhr){if(xhr.overrideMimeType) xhr.overrideMimeType('application/json');}, 
     success: function(data) 
     { 
      console.log(data); 
     }, 
     error: function() 
     { 
      console.log('error'); 
     } 
    }); 
+0

jsonも投稿できますか? –

+0

コンソールの[ネットワーク]タブでAJAXの応答を見て、スクリプトがJSONより前にHTMLを返す理由を確認してください。 – Barmar

+0

あなたのPHPにはエラーがあり、 '<'はエラーメッセージの一部です。 @Barmarが提案したように、その答えを見つけてください。 –

答えて

0

だけで正常に動作jQueryのコードです。

PHPスクリプトに、JSONの代わりにHTMLを返すエラーがある必要があります。

+0

jquery – penHolder

0

URLエンコードされたPOSTパラメータを送信しているので、Content-typeリクエストヘッダーをapplication/jsonに設定しないでください。

xhr.setRequestHeader('Content-Type', 'application/json'); 

PHPはJSONパラメータを$_POSTに解析できません。私はそれが理解しているContent-typeが表示されないときにそれが$_POSTを記入しないので、あなたはUndefined index警告を得ると推測しています。

+0

で要求されたときと全く同じコードが正常に動作しますが、まだ同じ警告が表示されます – penHolder

+0

'&'を 'imgpath'の先頭で削除してみてください。私はそれが問題を引き起こすべきだとは思わないが、おそらくそれはそうである。 – Barmar

+0

いいえ、それは問題ではありません、私は本当にここで失われていますT_T – penHolder

関連する問題