2013-05-27 3 views
0

Это то, что я делал несколько раз, однако, используя тот же метод, он теперь не будет работать. Это простой сценарий загрузки изображений, в котором он отправляется на некоторый PHP для обработки, и я хочу, чтобы PHP выводил имя файла, которое должно читать JS.Ответ от AJAX

Вот мой JQuery:

$(function(){ 
    $('#photoimg').change(function(){ 
    var formData = new FormData($('#img_form')[0]); 
    var wHeight = $(window).height(); 
    // get height of browser 
    var wWidth = $(window).width(); 
    // get width of browser 
    $('#loading').show(); 
    $.ajax({ 
     url: '../_process/calendar_upload.php?w='+ wWidth +'&h='+ wHeight +'', 
     //send browser height and width to scale temp image to fit to screen 
     type: 'POST', 
     success: function (resp) { 
     $('#loading').hide(); 
     //write scaled image to popup 
     var fname = resp.imgname; 
     $("#cal_imageuploader").html("<img src='../_img/event_images/'"+ fname +" '/>"); 
     //loads temp image into popup for cropping 
     $('#cal_imageuploader').bPopup(); 
     //opens popup 
     //trigger cropping on photo 
     }, 
     data: formData, 
     cache: false, 
     contentType: false, 
     processData: false 
    }); 
    }); 
}); 

И PHP это время отвечал на:

<?php 
    $session_id = mysql_escape_string($_COOKIE['Foo']); 
    // User session id 
    $path = "../_img/event_images/"; 
    $tmp_path = "../_img/tmp"; 
    $wHeight = $_REQUEST['h']; 
    $wWidth = $_REQUEST['w']; 
    $valid_formats = array("jpg", "png", "gif", "bmp", "jpeg"); 
    if (isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") { 
    $name = $_FILES['photoimg']['name']; 
    $size = $_FILES['photoimg']['size']; 
    if (strlen($name)) { 
     list($txt, $ext) = explode(".", $name); 
     if (in_array($ext, $valid_formats)) { 
     if ($size < (3024 * 3024)) { 
     // Image size max 3 MB 
      $hash = "49esd34h"; 
      $randstring = rand(5, 10); 
      $actual_image_name = $session_id."_".sha1($name . $hash . $randstring) . "." . $ext; 
      $tmp = $_FILES['photoimg']['tmp_name']; 
      //tmp file code goes here 
      if (move_uploaded_file($tmp, $path . $actual_image_name)) { 
      $resp['imgname'] = $actual_image_name; 
      echo json_encode($resp); 
      } else 
      echo "failed"; 
     } else 
      echo "Image too large..."; 
     } else 
     echo "Invalid file format..."; 
    } else 
     echo "Please select image..!"; 
    exit; 
    } 
?> 

В настоящее время вар fname не определена, и я не могу понять, почему. Есть идеи?

+0

Конечно, вы должны проверить вашу консоль и вкладку сети и вы не видите ошибки в противном случае вы бы разместить его, не так ли? –

+0

Да, проверенная консоль, и единственное, что я вижу, это то, что var fname не определено. Это то, что меня беспокоит. –

+0

попробуйте 'console.log (resp)' и посмотрите, какой ответ вы получите с сервера. – Spokey

ответ

1

Try, указав dataType : 'json' в AJAX

$.ajax({ 
     url: '../_process/calendar_upload.php?w='+ wWidth +'&h='+ wHeight +'', 
     //send browser height and width to scale temp image to fit to screen 
     type: 'POST', 
     dataType : 'json', 
     success: function (resp) { 
     $('#loading').hide(); 
     //write scaled image to popup 
     var fname = resp.imgname; 
     $("#cal_imageuploader").html("<img src='../_img/event_images/'"+ fname +" '/>"); 
     //loads temp image into popup for cropping 
     $('#cal_imageuploader').bPopup(); 
     //opens popup 
     //trigger cropping on photo 
     }, 
     data: formData, 
     cache: false, 
     contentType: false, 
     processData: false 
    }); 
+0

Именно то, что было предложено раньше, - работает. Благодарю. –

0

Я думаю, что объект ответа не имеет imgname.

Я думаю, что $ actual_image_name не получает никакого значения, можете ли вы проверить значение переменной.

+0

$ actual_image_name правильно - я проверил, чтобы файл был загружен и переименован правильно, и это так. Так что ничего там ... его просто вернуть его в jQuery! Grr! –

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