来自AJAX的回复

时间:2013-05-27 12:55:14

标签: php jquery ajax image

这是我已经多次做过的事情,但是使用相同的方法它现在不起作用。 这是一个简单的图像上传脚本,它发布到一些PHP进行处理,我希望PHP输出要由JS读取的文件名。

这是我的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;
  }
?>

目前var fname未定义,我想不出原因。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

尝试在ajax中指定dataType : 'json'

$.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
    });

答案 1 :(得分:0)

我认为响应对象没有imgname。

我猜$ actual_image_name没有得到任何值,你可以查看变量的值。