我一直在尝试使用chrome和firefox调试ajax调用。我两个都是新手。当使用chrome进行debbuging时,我得到了一个ajax响应,最后两个参数(jqXHR, textStatus, errorThrown)
为空,第一个是xhr状态0.我有时说,因为我得到了一些xhr状态200和params { {1}}正在打印解析错误,并出现意外字符'。我一直在看我的PHP代码,而且这个'<'现在是因为我一直在做测试:评论每个PHP代码并返回php从ajax调用获得的textStatus, errorThrown
,我得到了相同的错误。我一直在看着我的json并且状态良好。由于所有这些错误和混乱的调试工具让我感到困惑,我不太了解,我转向firefox和firebug,在那里我得到另一条不同的信息:"未被捕获的异常:内存不足"
我一直在阅读一些其他开发人员提出同样的问题,并尝试了接受的答案,但我仍然无法找到问题,这就是为什么我在这里发布我的代码,希望有人可以提供帮助。非常感谢!
html代码:
$_POST['json']
index.js中的jscript代码:
<input type="submit" data-effect="mfp-zoom-out" value='Submit' onClick="setTypeAdvanced()" style= "
position: relative;
top: -152px;
left: 129px;
" />
编辑添加我的PHP代码:
function setTypeAdvanced(){
var advancedFormVars = {};
/**SHOW*/
if(document.getElementById('OfferID').checked == true){
advancedFormVars['checkbox1'] = document.getElementById('OfferID').value;
}
if(document.getElementById('offerName').checked == true){
advancedFormVars['checkbox2'] =document.getElementById('offerName').value;
}
if(document.getElementById('campaignID').checked == true){
advancedFormVars['checkbox3'] = document.getElementById('campaignID').value;
}
if(document.getElementById('campaignName').checked == true){
advancedFormVars['checkbox4'] = document.getElementById('campaignName').value;
}
if(document.getElementById('installs').checked == true){
advancedFormVars['checkbox5'] = document.getElementById('installs').value;
}
if(document.getElementById('revenue').checked == true){
advancedFormVars['checkbox6'] = document.getElementById('revenue').value;
}
/** FILTERS */
if(document.getElementById('offerIDFilt').checked == true){
advancedFormVars['checkbox7'] = document.getElementById('offerIDFilt').value;
}
if(document.getElementById('publisherIDFilt').checked == true){
advancedFormVars['checkbox8'] = document.getElementById('publisherIDFilt').value;
}
if(document.getElementById('publisherIDTextVal').value.length >'0'){
advancedFormVars['checkbox9'] = document.getElementById('publisherIDTextVal').value;
publisherIDTextVal = document.getElementById('publisherIDTextVal').value;
}
if(document.getElementById('offIDTextVal').value.length > '0'){
advancedFormVars['checkbox10'] = document.getElementById('offIDTextVal').value;
}
/**GROUP BY*/
if(document.getElementById('dates').checked == true){
advancedFormVars['checkbox11'] = document.getElementById('dates').value;
}
if(document.getElementById('geos').checked == true){
advancedFormVars['checkbox12'] = document.getElementById('geos').value;
}
if(document.getElementById('browsers').checked == true){//arreglar no coge checked, coge objeto html
advancedFormVars['checkbox13']= document.getElementById('browsers').value;
}
if(document.getElementById('oS').checked == true){//arreglar coge undefined
advancedFormVars['checkbox14'] = document.getElementById('oS').value;
}
/**ORDER BY*/
if(document.getElementById('installsGroupBy').checked == true){
advancedFormVars['checkbox15']= document.getElementById('installsGroupBy').value;
}
if(document.getElementById('revenueGroupBy').checked == true){
advancedFormVars['checkbox16']= document.getElementById('revenueGroupBy').value;
}
advancedFormVars['none']= (typeof none=== 'undefined') ? 'default' : none;
advancedFormVars['ASC']= (typeof ASC === 'undefined') ? 'default' : ASC;
advancedFormVars['DESC']= (typeof DESC === 'undefined') ? 'default' : DESC;
loadFormAdvanced(advancedFormVars);
}
function loadFormAdvanced(advancedFormVars){
var json = JSON.stringify(advancedFormVars);
$.ajax({
url : 'AL_loadForm.php',
type : 'POST',
data : {
json:json
},
dataType:'json',
success : function(data) {
alert(data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert('error '+errorThrown);
alert('status '+textStatus);
alert('xhr status '+jqXHR.status);
}
});
}
这是我的json:
<?php
if($_POST){
if($_POST['json']){
echo json_encode($_POST['json']); //also tryed echo($_POST['json']);
}
}
?>
在ajax电话中发出之前,它已从控制台日志中复制/粘贴:
{"checkbox1":"OfferID","checkbox2":"Offer Name","checkbox3":"CampaignID","checkbox4":"CampaignName","checkbox5":"Installs","checkbox6":"Revenue","checkbox7":"OfferID","checkbox8":"PublisherID","checkbox9":"some publisher","checkbox10":"some offer","checkbox12":"Geos","checkbox15":"Installs","none":"default","ASC":"default","DESC":"default"}
答案 0 :(得分:1)
点击setTypeAdvanced
按钮后,您在没有参数的情况下致电submit
。该函数构建一个名为advancedFormVars
的对象并调用loadFormAdvanced(advancedFormVars)
。在您stringify
变量之后,您将其传递给AL_loadForm.php
的AJAX POST请求。您收到0
作为状态代码,这可能意味着许多不同的事情(请参阅this)。基本上,您需要检查服务器的日志以了解发生了什么。它收到了请求吗?如果是这样,是否有错误?此外,您需要检查浏览器控制台的网络选项卡,以查看您收到的响应。 <
是一个很大的线索,它可能意味着您的服务器发回一些HTML,这可能太大了,可能是由于响应数据集太大或服务器没有很好地处理帖子。
编辑:
此PHP代码不正确:
<?php
if($_POST){
if($_POST['json']){
echo json_encode($_POST['json']); //also tryed echo($_POST['json']);
}
}
?>
我假设你想知道请求是否发布,如果是,那么检查它是否有'json'
元素,但$_POST
是真的,即使它是get请求,因为那么它是一个空的array
,$_POST['json']
会导致错误,如果你没有&#39; json&#39;元件。像这样修改它:
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST'){
if(isset($_POST['json'])){
echo json_encode($_POST['json']); //also tryed echo($_POST['json']);
}
}
?>
请注意,您正在将其编码为JSON,然后想要alert
它。你不应该alert
大的json字符串。请改用console.log
。