>백엔드 개발 >PHP 튜토리얼 >ajax +업로드 이상한 현상이 있나요?

ajax +업로드 이상한 현상이 있나요?

WBOY
WBOY원래의
2016-09-19 09:16:371203검색

<code><form method="post" name="form" id="form" enctype="multipart/form-data">
              <textarea name="post" rows="3" maxlength="100"  id="post"></textarea></td>
                 
                  <input type="file" name="myFile">
                 
                          <button type="submit" id="post_btn">發佈</button> <span id="show"></span>
              </form>
              
$("#post_btn").click(function(e){
     e.preventDefault();

        if (post.value=='')
        {
            post.focus();
            document.getElementById("show").innerHTML = "勿為空";
            return (false);
        }
        else
        {
            var timelinedata = new FormData($("#form")[0]);
            
            $.ajax({
                type:"POST",
                url:"ing",
                data: timelinedata,
                cache: false,
                contentType: false,
                processData: false,
                success:function(data){
                    $("#show").html(data);
                }
            });
        }
    
});</code>

하는

<code>$post = htmlspecialchars(preg_replace("/[\'\"]+/" , '' ,$_POST['post']),ENT_QUOTES);
$addtime = time();
          
$SQL_RE = mysql_query("SELECT * FROM `xxx`
WHERE `post` = '".$post."'
");    

if(mysql_num_rows($SQL_RE)==0)
{
        $allowTime = 60; 
        $allowT = md5();
      if (time() - $_SESSION[$allowT] > $allowTime)
      {
          $_SESSION[$allowT] = time(); 
          
          $sql = mysql_query("INSERT INTO `xxx`
          (`post`,`id`,`addtime`)
          VALUES
          ('".$post."','".$_SESSION['userid']."','".$addtime."') 
              ");

          echo '已發佈';
      }
      else
      {
          echo '過於頻繁,請稍候';
          
      
      }
}
else
{
    echo '你發佈了相同的內容';
}</code>

우선
사진을 올릴 수 있기 때문에 ajax에서는 enctype="multipart/form-data",

을 추가해야 할 것 같습니다.
<code>contentType: false,
processData: false,</code>

ing에 사진을 올려보자는 판단을 해보았더니 아무 상관이 없어서 삭제했습니다
문제가 생겼습니다
내 ing의 판단과 같습니다
제가 설명한 내용은 다음과 같습니다. 무슨 일이 일어났는지 (Firefox의 경우에도 동일):

000이라는 게시물을 게시했습니다.
그는 #show에 표시됩니다: 게시됨
다음 순간에는 다음과 같이 됩니다. 동일한 콘텐츠를 게시했습니다.
알겠습니다. 그러면 다시 게시를 누르겠습니다( 콘텐츠는 000과 동일)
이때 "동일한 내용을 게시하셨습니다"라고 나오는 것이 맞습니다
그런데 이때 웹페이지가 갑자기 전혀 움직이지 않다가 약 3초 정도 후에 반응합니다. 움직일 때 응답이 없습니다. CSS와 커서:포인터가 있기 때문에 마우스에 손바닥이 나타나므로 웹페이지가 반응하는지 판단할 수 있습니다.
그런 다음 다시 게시를 클릭합니다(콘텐츠는 여전히 000입니다). 상황은 여전히 ​​이전 줄
과 동일합니다. 이때 내 콘텐츠는 00000으로 변경되어 성공적으로 게시되었습니다
. 하지만 여전히 #show: Published
에 표시되고 다음 순간에는 다음으로 변경되었습니다. 같은 콘텐츠를 게시했는데
웹페이지가 또 3초간 좌우로 멈췄어요...

그럼 원인이 무엇인지 모르겠습니다.
내 생각에는

<code>contentType: false,
processData: false,</code>

그게 관련이 많네요
그러다 떼어내고 보니 성공하지 못했어요
사진 올리는 것과 관련이 있는 것 같네요
굳이 안 하면 되니까 사진을 업로드하고 간단한 양식만 제출하면 괜찮습니다
그렇다면 이 작성 방법은 제가 stackoverflow에서 크롤링한 결과입니다
다음과 같습니다: http://stackoverflow.com/ques...
음... 궁금해요. 이런 상황은 없나요?
이렇게 쓰는 게 잘못된 걸까요? 모든 값을 직접 캡처하는 다른 방법이 있습니까? 이미지 업로드도 포함되나요?

답글 내용:

<code><form method="post" name="form" id="form" enctype="multipart/form-data">
              <textarea name="post" rows="3" maxlength="100"  id="post"></textarea></td>
                 
                  <input type="file" name="myFile">
                 
                          <button type="submit" id="post_btn">發佈</button> <span id="show"></span>
              </form>
              
$("#post_btn").click(function(e){
     e.preventDefault();

        if (post.value=='')
        {
            post.focus();
            document.getElementById("show").innerHTML = "勿為空";
            return (false);
        }
        else
        {
            var timelinedata = new FormData($("#form")[0]);
            
            $.ajax({
                type:"POST",
                url:"ing",
                data: timelinedata,
                cache: false,
                contentType: false,
                processData: false,
                success:function(data){
                    $("#show").html(data);
                }
            });
        }
    
});</code>

하는

<code>$post = htmlspecialchars(preg_replace("/[\'\"]+/" , '' ,$_POST['post']),ENT_QUOTES);
$addtime = time();
          
$SQL_RE = mysql_query("SELECT * FROM `xxx`
WHERE `post` = '".$post."'
");    

if(mysql_num_rows($SQL_RE)==0)
{
        $allowTime = 60; 
        $allowT = md5();
      if (time() - $_SESSION[$allowT] > $allowTime)
      {
          $_SESSION[$allowT] = time(); 
          
          $sql = mysql_query("INSERT INTO `xxx`
          (`post`,`id`,`addtime`)
          VALUES
          ('".$post."','".$_SESSION['userid']."','".$addtime."') 
              ");

          echo '已發佈';
      }
      else
      {
          echo '過於頻繁,請稍候';
          
      
      }
}
else
{
    echo '你發佈了相同的內容';
}</code>

우선
사진을 올릴 수 있기 때문에 ajax에서는 enctype="multipart/form-data",

을 추가해야 할 것 같습니다.
<code>contentType: false,
processData: false,</code>

ing에 사진을 올려보자는 판단을 해봤는데 별 상관이 없어서 삭제했습니다
문제가 생겼습니다
내 ing의 판단과 같습니다
제가 설명한 내용은 다음과 같습니다. 무슨 일이 일어났는지 (Firefox의 경우에도 동일):

000이라는 게시물을 게시했습니다.
그는 #show에 표시됩니다: 게시됨
다음 순간에는 다음과 같이 됩니다. 동일한 콘텐츠를 게시했습니다.
알겠습니다. 그러면 다시 게시를 누르겠습니다( 콘텐츠는 000과 동일)
이때 "동일한 내용을 게시하셨습니다"라고 나오는 것이 맞습니다
그런데 이때 웹페이지가 갑자기 전혀 움직이지 않다가 약 3초 정도 후에 반응합니다. 움직일 때 응답이 없습니다. CSS와 커서:포인터가 있기 때문에 마우스에 손바닥이 나타나므로 웹페이지가 반응하는지 판단할 수 있습니다.
그런 다음 다시 게시를 클릭합니다(콘텐츠는 여전히 000입니다). 상황은 여전히 ​​이전 줄
과 동일합니다. 이때 내 콘텐츠는 00000으로 변경되어 성공적으로 게시되었습니다
. 하지만 여전히 #show: Published
에 표시되고 다음 순간에는 다음으로 변경되었습니다. 같은 콘텐츠를 게시했는데
웹페이지가 또 3초간 좌우로 멈췄어요...

그럼 원인이 무엇인지 모르겠습니다.
내 생각에는

<code>contentType: false,
processData: false,</code>

그게 관련이 많네요
그러다 떼어내고 보니 성공하지 못했습니다
이미지 업로드와 관련이 있는 것 같네요
굳이 안 하셔도 되니까 이미지를 업로드하고 간단한 양식만 제출하면 괜찮습니다
그렇다면 이 작성 방법은 제가 stackoverflow에서 크롤링한 결과입니다
다음과 같습니다: http://stackoverflow.com/ques...
음... 궁금해요. 이런 상황은 없나요?
이렇게 쓰는 게 잘못된 걸까요? 모든 값을 직접 캡처하는 다른 방법이 있습니까? 이미지 업로드도 포함되나요?

브라우저의 F12 개발자 도구를 열고 네트워크 탭으로 들어갑니다. 그런 다음 게시 버튼을 다시 클릭하여 요청이 여러 개 있는지 확인하세요.

이해가 안되네요. 대만 출신이신가요, 아니면 홍콩, 마카오 출신이신가요? 왜 아직도 번체자를 사용하여 의사소통을 하시나요? 본토 사람들은 이미 간체자를 사용하고 있습니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.