【问题标题】:jQuery Ajax returns "status: 0" only in some casesjQuery Ajax 仅在某些情况下返回“状态:0”
【发布时间】:2015-07-22 00:58:50
【问题描述】:

我参与了一项关于亚马逊 Mechanical Turk 的心理语言规范研究,参与者看到一张图片,然后大声说出它的名字。他们的声音是通过 HTML5 的录音功能录制的,然后录音上传到服务器。有三个相关文件:显示外部问题的 php 文件(external_question.php)、处理所有 javascript 的 js 文件(controller.js)和接受文件上传的 php 文件(accept_upload.php)。

external_question.php为实时服务器设置:

<form id="question_form" name="question_form" action="https://www.mturk.com/mturk/externalSubmit" method="post">

external_question.php为沙箱服务器设置:

<form id="question_form" name="question_form" action="https://workersandbox.mturk.com/mturk/externalSubmit" method="post">

现在,出于某种奇怪的原因,每当我使用实时服务器时,finalizeRecording() 在控制台中打印的响应是来自accept_upload 的响应,它读取 responseText:"", status:0, statusText:"error" . (请参阅下面的函数和文件。)基本上,什么都不会返回。

但是,当我使用沙盒服务器时,一切正常。文件已上传,我的回复看起来很正常:

readyState: 4, responseText: "页面进入。&lt;pre&gt;音频文件成功处理...↵ [size] => 540716↵)↵↵)↵&lt;/pre&gt;", status: 200, statusText: "OK"

我被难住了!当我将表单提交到一个 URL 时,什么可能导致我的 Ajax 请求完全失败,但当我提交到另一个 URL 时却可以正常工作?


相关文件和函数

controller.js(相关函数)

function finalizeRecording( blob ) {
    var myFormData = new FormData();
    myFormData.append('audioFile', blob, 'rec_' + workerId + '_' + stimulusName + '_' + assignmentId + '.wav');

    $.ajax({
        url: 'accept_upload.php',
        type: 'POST',
        processData: false, // important
        contentType: false, // important
        dataType : 'json',
        data: myFormData,
        complete: function(result) {
            console.log(result);
            $('form').trigger('submit');
        }
    });;
}

accept_upload.php(整个文件)

<?php
echo "Page entered.";

$uploadDir = '../../WHEREVER/WHEREVER/';
chmod('uploads/', 0777);
$uploadFile = $uploadDir . basename($_FILES['audioFile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['audioFile']['tmp_name'], $uploadFile)) {
    echo "Audio file successfully processed\n";
} else {
    echo "Audio file processing attempt unsuccessful\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);

print "</pre>";

?>

【问题讨论】:

  • 使用 dataType json 但返回文本没有意义
  • 你是对的,我不知道为什么会这样。但这不会对未连接的请求产生影响。

标签: javascript jquery ajax xmlhttprequest mechanicalturk


【解决方案1】:

跨域,您不能调用不是内容来源的 URI。但是,您可以通过CORS 或使用JSONP 解决此问题。

以下是我对此的一些回答:

JQuery JSON Calls To PHP WebService Always Runs "Error" Callback

jQuery AJAX cross domain

【讨论】:

  • 但如果这是问题所在,为什么它会发生在一台服务器上而不是另一台服务器上?他们都从不同于托管 external_question.php 的服务器上传文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 2014-01-17
  • 2020-06-20
  • 2015-05-02
相关资源
最近更新 更多