jQuery .ajax()GET请求不能从firefox工作。适用于Chrome

时间:2015-04-09 16:35:56

标签: javascript php jquery html ajax

我正在使用第三方API将某些服务集成到我拥有的HTML表单中。

要使用API​​,您必须验证每个请求的哈希值和时间戳。 30分钟后,您的哈希和时间戳不再有效。为避免API出错,我决定每次提交表单时使用JavaScript和PHP动态设置值。

这是我用来生成哈希和时间戳信息的PHP文件。

 <?php
    if(isset($_REQUEST['action'])){
    switch($_REQUEST['action']){
    case 'getHash':
    //Assign your variables the necessary values.
    $base_url = "";//base_url value goes here. This is the location the request is sent to. 
    $account_id = "";//You must put your account_id here
    $api_accesskey = "";//You must put your api_accesskey here
    $success_url = "";//Your success URL goes here
    $decline_url = "";//your decline URL goes here.
    $timestamp = time();
    //The $hash_string concatenates your three required parameters that 
    //will be hashed. If you are using transparent redirect you must 
    //also add your success and decline URLs.
    $hash_string = $account_id.",".$api_accesskey.",".$timestamp.",".$success_url.",".$decline_url;
    //The $hash_value is the variable you will post.
    $hash_value = hash("sha256",$hash_string);
    $hash_data = array(
            'base_url' => $base_url,
            'account_id' => $account_id,
            'success_url' => $success_url,
            'decline_url' => $decline_url,
            'timestamp' => $timestamp,
            'hash' => $hash_value,
            );
    $jsonHash = json_encode(array('success'=> true,'data' => $hash_data), JSON_FORCE_OBJECT);
    print_r ($jsonHash);
    break;
    }
    }
    ?>  

这是我用来请求HTML表单信息的jQuery / JavaScript,然后将该信息提交给第三方API。

<script>
function getPaymentFormInformation(event) {
//this is the query string we send to hash.php to get our hash and   config information
var post_data = {action: "getHash"};
$.ajax({
  url: "hash.php",
  data: post_data,
  dataType: 'json',
  type: "GET",
  success: function(response ){
    //assigning the response to a variable.
    var json = response;
    //assigning our values for submitting our request.
    document.getElementById('account_id').value = json.data.account_id;
    document.getElementById('success_url').value = json.data.success_url;
    document.getElementById('decline_url').value = json.data.decline_url;
    document.getElementById('timestamp').value = json.data.timestamp;
    document.getElementById('hash').value = json.data.hash;
    document.getElementById('paymentForm').action = json.data.base_url;
    document.getElementById("paymentForm").submit();
  },
  error: function( error ){
// Log any error.
console.log( "ERROR:", "Request did not work." );
  }
})
return false;
}
</script>

这在Chrome上完美运行,但是当我在firefox中运行它时,我对hash.php的AJAX请求每次都会失败。我搜索并搜索了有同样问题的人,我无法想出任何东西。

任何和所有帮助将不胜感激。

更新:

This is what the firebug console is doing.

编辑:更新了我的代码段,以反映给出的答案中的建议更改。在Firefox中仍然遇到相同的行为。

更新:

我已经将我的错误捕获功能更改为我发现的另一个示例更详细。

error: function(jqXHR, exception) {
        if (jqXHR.status === 0) {
            alert('Not connect.\n Verify Network.');
        } else if (jqXHR.status == 404) {
            alert('Requested page not found. [404]');
        } else if (jqXHR.status == 500) {
            alert('Internal Server Error [500].');
        } else if (exception === 'parsererror') {
            alert('Requested JSON parse failed.');
        } else if (exception === 'timeout') {
            alert('Time out error.');
        } else if (exception === 'abort') {
            alert('Ajax request aborted.');
        } else {
            alert('Uncaught Error.\n' + jqXHR.responseText);
        }
      }

我现在得到:

未捕获的异常:内存不足

Firebug输出:

Firebug

我已更新我的错误处理程序以输出到控制台而不是抛出警报。

我发送请求时会触发此行。

if (jqXHR.status === 0) {
console.log('Not connected.\n Verify Network.');

2 个答案:

答案 0 :(得分:4)

您不是将json发送到服务器,只是一个普通的查询字符串(在编辑之前和之后),也不是在服务器端处理json;您可以通过超全局$_REQUEST访问变量。

所以你需要删除:

contentType: 'application/json; charset=utf-8',

当您发送json时,您可能需要这样,以便jQuery将自动为您解析json字符串:

dataType: 'json',

现在您不必在成功处理程序中手动解析json。

答案 1 :(得分:0)

在获得信息以添加更强大的错误报告后,我能够查明问题。

我的错误脚本在if (jqXHR.status === 0)失败了。我能够搜索此状态代码并找到解决方案。

  

JQXHR状态:0原因:当ajax功能时请求不会取消   叫做。解决方案:只需添加return false;打电话给   函数,即OnClientClick =&#34; AJAXMethod();返回false;&#34;

     

资料来源:Ajax jqXHR.status==0 fix error(第二回复)