0

我根据 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

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

在此处输入图像描述

有什么建议么?请注意,控制台错误之后会立即出现同一文件的“成功”响应。但是php文件仍然没有运行。我没有收到来自服务器的 php 错误响应 - 我也没有看到我放置在 php 文件第一行的嵌入回显echo("Got here!);。即使我注释掉除该行之外的所有内容也是如此。

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

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

再次感谢您的浏览。

4

1 回答 1

0

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

而不是console.log("jqxhr.status: " . jqxhr.status );你想要的console.log("jqxhr.status: " + jqxhr.status );

第二个错误似乎是该status字段不存在(来自您的评论)。但是,从 jquery 文档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 ); });
于 2014-12-11T18:08:16.983 回答