2017-02-20 20 views
2

ユーザがダウンロードをクリックすると、ファイルを含むサーバ上にzipファイルが正常に作成され、zipの場所(変数$ zip)をPHPから応答として通知するはずですが、代わりに[objectオブジェクト]。他のすべてがそれをどうやって行うのか。私は間違って何をしていますか?PHPから返されるAJAX変数

はJQuery:

$('.download').click(function() { 
window.keys = []; 
$('.pad').each(function(i, obj) { 
    var key = $(this).attr('key'); 
     keys.push(key) 
}); 
var jsonString = JSON.stringify(keys); 
$.ajax({ 
     type:'post', 
    url:'download.php', 
    data: {data : jsonString}, 
     cache: false, 
    dataType: 'json', 
    success: function(data){ 

     alert(data); 

     } 
}); 
}); 

PHP:

<?php 


$data = json_decode(stripslashes($_POST['data'])); 

$numbercode = md5(microtime()); 
$zip = new ZipArchive(); 
$zip->open('kits/'.$numbercode.'.zip', ZipArchive::CREATE); 

foreach($data as $d) { 

$zip->addFile($d); 

} 

$zip->close(); 



echo json_encode($zip); 
?> 
+1

'$のzip'がオブジェクトである...、そのためには、文字列(ファイルの場所) – jake2389

+0

おかげも_cannot_ @ jake2389、私は今これを見る! – Jeff

答えて

2

戻り値の型が何を参照してくださいになりますJavaScriptオブジェクトです。

まず、構造を取得するには、console.log(data)とする必要があります。 Chromeの[ネットワーク]タブを調べることでもこれを行うことができます。

dataの構造がわかったら、その値を使用できます。

たとえば、alert(data.location)と入力して、実際の値を警告します。

1

私が何を見@ jake2389のおかげであなたはdataType: 'json',を指定した場合、あなたの結果はJSONオブジェクトになるので、AJAX、その警告[オブジェクトオブジェクト]からあなたdataTypeを削除

とphp-

// to echo the location of the zipfile 
echo 'kits/'.$numbercode.'.zip'; 
0

で私は間違っていました。基本的には、PHP内に新しい変数を作成して、$ zipは文字列ではなくzipアーカイブとして定義されていたため、AJAXに返信したいデータと$ linkを呼び出す必要がありました。ここに私が変えたものがあり、今はそれが働いています。

PHP:あなたは `新しいZIPARCHIVE()`としてそれを宣言している

<?php 


$data = json_decode(stripslashes($_POST['data'])); 

$numbercode = md5(microtime()); 
$zip = new ZipArchive(); 
$zip->open('kits/'.$numbercode.'.zip', ZipArchive::CREATE); 

foreach($data as $d) { 

$zip->addFile($d); 

} 

$zip->close(); 

$link = 'kits/'.$numbercode.'.zip'; 

echo json_encode($link); 
?> 
+0

私は、あなたがあなたのajax呼び出しを変更した場合、文字列にjson_encodeの必要はないと思う、アラートの問題は解決されません –

関連する問題