我的POST数据中的HTTP错误

时间:2011-07-29 05:05:33

标签: php javascript post

此问题是此前question of mine in here.

的延续

我之前的代码中有这个HTTP: Error,因为查询字符串超过了我的webservice网址发送的限制(这是我所理解的)。之前我使用方法Get kleinohad 告诉我使用方法POST。现在,我正在使用POST,但仍然有一个错误,就像我在方法GET中所遇到的那样,每当我发送大量post data时,就会出现'HTTP:错误'网址,(它不会通过我的网络服务。)。

这是我的javascript代码:

var dataJSON = {
    "SessionID": $.cookie("SessionID"),
    "operation": "add",       
    "transaction_date":$('#tallyDate').val(),
    "supplier_id":$('#supplierInput').attr("name"),
    "wood_specie_id":$('#woodSpecie').attr("name"),   
    "lines":plank_data,
    "scaled_by":$('#tallyScaled').val().toUpperCase(),
    "tallied_by":$('#tallyTallied').val().toUpperCase(),
    "checked_by":$('#tallyChecked').val().toUpperCase(),
    "total_bdft":$('#tallyTotal').val(),
    "final":"N"
  }; 
  alert('this is the datajson from add :   '  + JSON.stringify(dataJSON));

  $.ajax({
    type: 'POST',
    data: dataJSON,
    url: 'processjson2.php?' + $.param({path:'update/tallyHdr',json:JSON.stringify(dataJSON)}),
    dataType: primeSettings.ajaxDataType,
    success: function(data) {
      if ('error' in data)
      {
        showMessage('ERROR: ' + data["error"]["msg"]);
      }
      else{
        $('#tblTallyHdr').trigger('reloadGrid'); 
      }
    }
  });

这是我的.php代码(感谢SMka):

<?php

//this is already running code but could not accept large query string
 $data_url = http_build_query (array('json' => $_REQUEST["json"]));
$data_len = strlen ($data_url); 

echo file_get_contents("http://localhost:8001/" . $_REQUEST["path"], false, stream_context_create(
    array (
        'http' => array(
            'method'=>'POST',
            'header' => "Connection: close\r\nContent-Length: $data_len\r\n",
            'content'=>$data_url
        )
    )
));
?>

我的问题是,为什么我仍然无法使用post向我的网络服务发送许多数据?我真的以为使用post方法可以帮助我向网络服务发送许多请求,那么我的代码有什么问题?

编辑我将代码更改为

$.ajax({
        type: 'POST',
        data: dataJSON,
        url: 'processjson2.php?',
        dataType: primeSettings.ajaxDataType,
        success: function(data) {}
})

我的输出网址是http://localhost/jQueryStudy/RamagalHTML/processjson2.php?path=update/tallyHdr,这给了我一个错误Session ID not found。我发现我的datajson没有发送到我的url webservice datajson不存在。

2 个答案:

答案 0 :(得分:0)

您的问题出在以下代码行中:

url: 'processjson2.php?' + $.param({path:'update/tallyHdr',json:JSON.stringify(dataJSON)}),

此行会将数据附加到您要将请求发布到的网址。如果您有太多数据,URL将淹没Web服务器。 (基本上,您仍在执行GET请求。)

而是用以下内容替换该行。

url: 'processjson2.php',    

然后将path:'update/tallyHdr'添加到您的dataJSON对象,看看是否有效。

答案 1 :(得分:0)

我现在有了答案。当他/她说这句话:

时,Cheeken 正确
url: 'processjson2.php?' + $.param({path:'update/tallyHdr',json:JSON.stringify(dataJSON)}),

是问题,我正在执行get请求。我应该用这个代替它:

url: 'processjson2.php?',

那么,我应该在哪里放置我的dataJSON? 这是我使用的运行代码:

$.ajax({
    type: 'POST',
    data: $.param({json:(JSON.stringify(dataJSON))}),
    url: 'processjson2.php?path=update/tallyHdr',
    dataType: primeSettings.ajaxDataType,
    success: function(data) {
      if ('error' in data)
      {
        showMessage('ERROR: ' + data["error"]["msg"]);
      }
      else{
        $('#tblTallyHdr').trigger('reloadGrid'); 
      }
    }
  });

此行$.param({json:(JSON.stringify(dataJSON))})将我的 dataJSON 转换为查询字符串,而 json 是保存我的json数据的变量。这就是我要用ajax运行我的程序代码的所有改变