2012-01-10 2 views
1

갑자기 "버그"가 생겼습니다. 지금까지이 스크립트는 매력처럼 작동했습니다. 그러나 갑자기 formData 변수가 존재하지 않는 것처럼 jQuery.ajax을 통해 전달되지 않습니다.jQuery.ajax와의 이상한 동작

재미있는 점은 데이터를 표시하는 alert을 실행하면 모두 작동한다는 것입니다. 그러나 경고를 제거하자마자 PHP 스크립트는 formData 색인이 없다고 알려줍니다.

나는이 발생하거나 해결하는 방법을 무엇으로 우둔 해요 : -/

이 프로덕션 서버에 내 개발 서버에서 잘 작동하지만. 다음 일이 뭐죠

jQuery('#btn_saveForm').live('click', function() { 
    var instance = 'update'; 
    var brand_id = jQuery('#itemID').val(); 

    // Get form data 
    var form_data = jQuery("#data_form").serialize(); 

    // alert(form_data); //If I uncomment this, the script works... 

    //Process form data 
    jQuery.ajax({ 
     url: siteURL +"/wp-content/themes/my_theme/include/jquery.php", 
     data: { 
      instance : instance, 
      formData : form_data, 
      brandID : brand_id 
     }, 
     success: (function(feedback) { 
      showFeedback(feedback); 
     }), 
     dataType: 'json' 
    }); 
}); 
+0

이것은 야생의 추측이지만, 배포시에는 작동하지만 배포 할 때 서버에서 MIME 유형을 설정하는 것과 관련된 문제가 아니라 유효한 JSON을 실제로 반환하고 있습니까? fiddler 또는 Firebug의 NET 탭 중 하나 일 수 있습니다. 오류를 추가해보십시오 : function (e) {} 블록뿐 아니라 서버에있는 전자 메일에 포함 된 내용을 확인하십시오 (다시, 방화범을 통해 - VS를 사용할 수 없다고 가정) – SpaceBison

+0

@SpaceBison - 감사. FF의 NET 탭을 보면 모든 데이터가 실제로 전송되고 있음을 알 수 있습니다! 하지만 호출되는 PHP 코드에서'print_r ($ _REQUEST)'를 실행하면'instance'와'brandID' 만 보여줍니다. – Steven

+0

@SpaceBison, PHP 파일이'$ _REQUEST [ 'formData']'를 찾을 수 없기 때문에 아무 것도 반환하지 않습니다. – Steven

답변

0

시도는 다른 브라우저/변경 브라우저를 다시 시작하고 볼 수

+0

두 개의 다른 브라우저에서 동일합니다 – Steven

1

내 생각은 AJAX 요청이 전송되기 전에에서 alert()을 두는 것은 form_databrand_id 변수가 완전히 충전 할 수 있다는 것 . 그걸 염두에두고,이 시도 :

또는
jQuery.ajax({ 
    url: siteURL +"/wp-content/themes/my_theme/include/jquery.php", 
    data: { 
     instance : instance, 
     formData : jQuery("#data_form").serialize(), 
     brandID : jQuery('#itemID').val() 
    }, 
    success: (function(feedback) { 
     showFeedback(feedback); 
    }), 
    dataType: 'json' 
}); 

, 그냥 테스트, 당신은 그 차이가 있는지 확인하기 위해 AJAX 호출에 async: false을 설정할 수 있습니다. 당신이 (JS가 단일 스레드이기 때문에, 아주 이상한 일 것이다) 여기에 몇 가지 종족이 있다는 사실이라면

+0

Rory McCrossan, 두 가지 해결책을 모두 시험해 보았습니다. 이 스크립트는 내 로컬 컴퓨터와 내 dev 서버에서 제대로 작동하지만 내 제품 서버에서는 작동하지 않습니다. som 코드를 변경하기 전에 일하고 있었지만이 코드는 변경하지 않았습니다. – Steven

+0

PS. @SpaceBison에 대한 내 의견보기 – Steven

+0

'serializearray'를 사용하면이 오류가 발생하지 않는다는 것을 발견했습니다. 더 이상 유용한 정보가 있으면 알려주세요. – Steven

0

, 다음 당신을 도움이 될 것입니다

setTimeout(function() { 
    jQuery.ajax({ 
     url: siteURL +"/wp-content/themes/my_theme/include/jquery.php", 
     data: { 
      instance : instance, 
      formData : form_data, 
      brandID : brand_id 
     }, 
     success: (function(feedback) { 
      showFeedback(feedback); 
     }), 
     dataType: 'json' 
    }) 
}, 0); 

0으로부터 타임 아웃 건설이 코드를 넣어 것입니다 실행 큐의 끝에.

+0

님께는 효과가 없습니다. 1000으로 설정하십시오. – Steven