jqxhr到本地服务器无法找到php文件

时间:2014-12-11 18:03:50

标签: php ajax target jqxhr

我根据Cimbali的建议更新了这个问题。现在这是指定请求的js代码:

......  
function editFiltName($thisFiltCell)    {
  var cellText=$thisFiltCell.text();
  var idx=$thisFiltCell.index(); //alert("idx: idx");
  var newFN=prompt("Enter new filter name below - up to 12 characters.", cellText); 
    switch (newFN)  {
        case    null        : return;   // cancel key hit
        case    cellText    : return;  // no change
        case    ""          : ; //$thisFCell.text('Filter' + (idx+1));
        default             : $thisFiltCell.text(newFN);    
    }   
    var action='updateFiltName';
    var request = MrAjax(action,newFN,idx);
} // end main function
//*******************************************
function MrAjax(action,P1,P2)  { 
    console.log("Ajax-> action: "+action+" P1: "+P1+" P2: "+P2);
    var jqxhr=$.ajax({  
        type: "POST",
        url: "../phpMain/editTblField.php",
        data: {action:action, P1:P1, P2:P2}
    });
    jqxhr.always(function() { console.log("jqxhr.status: " + jqxhr.status ); });
} // end MrAjax

当我输入一些数据时,这是控制台输出:

enter image description here

有什么建议吗?请注意,控制台错误之后会立即取得成功'对同一文件的响应。但是php文件仍然无法运行。我从服务器得到没有php错误响应 - 我也没有看到我的嵌入式回声放在php文件echo("Got here!);的第一行。即使我注释掉除了那条线之外的所有东西,这都是真的。

我不认为它是在PHP代码中,但为了以防万一,这里是:

<?php
echo "Got here!";
?>  

再次感谢您的回顾。

1 个答案:

答案 0 :(得分:0)

您的错误来自控制台日志中的拼写错误,您混合了来自不同语言的拼接。

而不是console.log("jqxhr.status: " . jqxhr.status );,而不是console.log("jqxhr.status: " + jqxhr.status );

第二个错误似乎是status字段不存在(来自您的评论)。但是,从jquery doc http://api.jquery.com/jQuery.ajax/#jqXHR

  

jQuery 1.5中$ .ajax()返回的jQuery XMLHttpRequest(jqXHR)对象是浏览器的原生XMLHttpRequest对象的超集。例如,它包含responseText和responseXML属性,以及getResponseHeader()方法。当传输机制不是XMLHttpRequest(例如,JSONP请求的脚本标记)时,jqXHR对象尽可能模拟本机XHR功能。

     

[...]

     

为了向后兼容XMLHttpRequest,jqXHR对象将公开以下属性和方法:

readyState
status
statusText
responseXML and/or responseText when the underlying request responded with xml and/or text, respectively
setRequestHeader(name, value) which departs from the standard by replacing the old value with the new one rather than concatenating the new value to the old one
getAllResponseHeaders()
getResponseHeader()
statusCode()
abort()

我也准备好它是一个Deferred对象,所以这个奇怪的行为可能来自尝试在它存在之前访问状态字段。尝试等待请求的完成。

因此,请使用以下内容代替console.log("jqxhr.status: " + jqxhr.status );

jqxhr.always(function() { console.log("jqxhr.status: " + jqxhr.status ); });

jqxhr.always(function(data, textStatus, errorThrown) { console.log("jqxhr.status=" + jqxhr.status + " : " + textStatus ); });