从PHP返回字符串并提醒jQuery响应

时间:2018-05-18 09:45:14

标签: php json ajax jquery-file-upload

我正在尝试做一些非常简单的事情:

jQuery post - >这将从服务器返回一个字符串 - >警报字符串?

但是对于我的生活,我无法获得显示字符串的警报,我得到对象或警告,

我在这里做错了什么?

结果:

  

JSON.parse:JSON数据第1行第2列的意外字符

     

例外:循环对象

     

[object Object]

更新Php代码:

public function fileupload(){
    $uniqueID = request('uniqueId');
    if($uniqueID != ''){
         echo 'Works'
    }
    else{
         echo 'Failed'
    }
}

更新了jQuery代码:alert位于最后一段代码

$(function () {

   $('.fileupload').fileupload({

      headers: {
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      },
      maxFileSize: 3000000,
      acceptFileTypes:  /(\.|\/)(pdf|jpeg)$/i,
      dataType: 'json',
      done: function (e, data) {
         $.each(data.result.files, function (index, file) {
            $('<p/>').text(file.name).appendTo(document.body);          
         });           
      },
         // Required for Progress bar
      progress: function (e, data) {
         var progress = parseInt(data.loaded / data.total * 100, 10);
         $(this).closest("div").find("div.bar").css(                                                   
            'width', progress + '%'            
         );
         // update text in progress bar
        $(this).closest("div").find("div.percentage").text(progress + '%');        
      }
      // This is required for displaying errors
      }).bind('fileuploadsubmit', function (e, data) {
         data.formData = {
            'uniqueId': $('.uniqueFileId').val()
         };

      }).on('fileuploadadd', function (e, data) {
         data.context = $('<div/>').appendTo('#files');
         $.each(data.files, function () {
         var node = $('<p/>').append($('<span/>'));     
         node.appendTo(data.context);
      });

      // This is also required for displaying errors 
      }).on('fileuploadprocessalways', function (e, data) {

         alert(data);

         var index = data.index,
            file = data.files[index],
            node = $(data.context.children()[index]);

         if (file.error) {
            node.append($('<span style=\'color:red; \'"/>').text(file.name +' '+ file.error + ',file must be .pdf or .jpg'));

         }
      });
   });

来自php的回复:

updated

3 个答案:

答案 0 :(得分:1)

您应该尝试以下更改:

$msg = 'Hello';
echo json_encode($msg);

如果在PHP函数中使用返回值,则返回有效。在您的情况下,您正在PHP和JavaScript中进行通信。 Ajax默认行为输出你在php中回显/打印的任何内容。

答案 1 :(得分:1)

您的问题是,您没有为您的信息指定密钥。

<强> PHP:

public function fileupload(){
    $uniqueID = request('uniqueId');
    if($uniqueID != ''){
         echo json_encode(array("msg" => 'Works'));
    }
    else{
         echo json_encode(array("msg" => 'Failed'));
    }
}

<强> jQuery的:

$(function () {

   $('.fileupload').fileupload({

      headers: {
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      },
      maxFileSize: 3000000,
      acceptFileTypes:  /(\.|\/)(pdf|jpeg)$/i,
      dataType: 'json',
      done: function (e, data) {
         $.each(data.result.files, function (index, file) {
            $('<p/>').text(file.name).appendTo(document.body);          
         });           
      },
         // Required for Progress bar
      progress: function (e, data) {
         var progress = parseInt(data.loaded / data.total * 100, 10);
         $(this).closest("div").find("div.bar").css(                                                   
            'width', progress + '%'            
         );
         // update text in progress bar
        $(this).closest("div").find("div.percentage").text(progress + '%');        
      }
      // This is required for displaying errors
      }).bind('fileuploadsubmit', function (e, data) {
         data.formData = {
            'uniqueId': $('.uniqueFileId').val()
         };

      }).on('fileuploadadd', function (e, data) {
         data.context = $('<div/>').appendTo('#files');
         $.each(data.files, function () {
         var node = $('<p/>').append($('<span/>'));     
         node.appendTo(data.context);
      });

      // This is also required for displaying errors 
      }).on('fileuploadprocessalways', function (e, data) {
console.log(data);



         alert(JSON.parse(data));

         var index = data.index,
            file = data.files[index],
            node = $(data.context.children()[index]);

         if (file.error) {
            node.append($('<span style=\'color:red; \'"/>').text(file.name +' '+ file.error + ',file must be .pdf or .jpg'));

         }
      });
   });

<强>的变化:

1)PHP代码返回有效的JSON,否则js会将其视为有效负载。 2)解析返回对象,你将在警告方法中拥有该JSON对象。

希望这个统计数据成为您的问题。

答案 2 :(得分:0)

根据文档,传递给fileuploadprocessalways处理程序的数据对象不包含来自服务器上传处理程序的ajax响应。

相反它包含

  

两个数组:

     

文件 - 包含所应用过程的结果。

     

originalFiles - 原始上传的文件。

https://github.com/blueimp/jQuery-File-Upload/wiki/Options#processing-callback-options

也许您打算为done回调编写处理程序。 https://github.com/blueimp/jQuery-File-Upload/wiki/Basic-plugin